zoukankan      html  css  js  c++  java
  • 多线程并发测试(apache ad)

    1.配置 ThreadPoolTaskExecutor bean

    复制代码
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        
        <!-- 扫描注解 -->
        <context:component-scan base-package="com.qi.quartz">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
        </context:component-scan>
        
        <bean id="taskExecutor" name="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">  
            <!-- 核心线程数 线程池维护线程的最少数量 -->
            <property name="corePoolSize" value="10" />  
            <!-- 线程池维护线程所允许的空闲时间 -->
            <property name="keepAliveSeconds" value="200" />  
            <!-- 线程池维护线程的最大数量 -->
            <property name="maxPoolSize" value="20" />  
            <!-- 线程池所使用的缓冲队列 -->
            <property name="queueCapacity" value="100" /> 
            <!-- 线程池对拒绝任务(无线程可用)的处理策略 ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃.  -->
            <property name="rejectedExecutionHandler">
                <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
            </property> 
        </bean>  
        
    </beans>

    2.controller使用

    /**
    * This file created at 2018年4月13日 下午3:06:57.
    *
    * Copyright (c) 2004-2014 AVTrace, Inc. All rights reserved.
    */
    package com.avtrace.nlc.nms.listener;

    import javax.annotation.Resource;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.jms.listener.SessionAwareMessageListener;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;

    /**
    * @author 唐芝泉
    * @since 1.0.0
    */
    @Controller
    @RequestMapping("/test")
    public class test implements SessionAwareMessageListener<Message> {
    Logger LOG = LoggerFactory.getLogger(test.class);
    @Resource(name = "taskExecutor")
    private ThreadPoolTaskExecutor taskExecutor;
    @RequestMapping("/execute")
    @ResponseBody
    @Override
    public void onMessage(Message message, Session session) throws JMSException {
    taskExecutor.execute(new Runnable(){

    public void run() {
    try {
    LOG.info("执行线程任务开始前");
    Thread.currentThread().sleep(1000);
    if (LOG.isDebugEnabled()) {
    LOG.info("执行线程任务结束");
    }
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    });

    //设置线程的存活时间
    taskExecutor.setKeepAliveSeconds(60);
    }

    }

    3、cmd f: (因为我把ad.exe放到f:下)

     

    <bean id="taskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="4" /> <!-- 并发线程数,想达到真正的并发效果,最好对应CPU的线程数及核心数 -->
    <property name="maxPoolSize" value="1000" /> <!-- 最大线程池容量 -->
    <property name="queueCapacity" value="2000" /> <!-- 超过最大线程池容量后,允许的线程队列数 -->
    </bean>

    这里我是设置4并发数,最大线程池容量1000

    F:>ab -n 10000 -c 1000 http://192.168.40.21:8080/cctv/test/excute

    这句命令表示10000次请求,1000个并发数 ,用时:1.206ms

    比正常配置 10000*1000-4*1000=9996000 

    工具:链接: https://pan.baidu.com/s/1lg7BB-8OKSoluWOGjz03kw 密码: dz7i

  • 相关阅读:
    mysql--SQL编程(关于mysql中的日期) 学习笔记2
    mysql--SQL编程(基础知识) 学习笔记1
    Geocoding java调用百度地图API v2.0 图文 实例( 解决102错误)
    java unicode转码为中文 实例
    spring hiberante 集成出现异常 java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
    [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction
    [Spring学习笔记 6 ] Spring JDBC 详解
    ubuntu 连接windows远程桌面 &&rdesktop 退出全屏模式
    maven Missing artifact com.sun:tools:jar:1.5.0
    mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询
  • 原文地址:https://www.cnblogs.com/huangwentian/p/8821328.html
Copyright © 2011-2022 走看看