/**
 * Created by zhiqi.shao on 2018/4/3.
 */
@EnableAsync
@Configuration
public class TaskPoolConfig {

    @Bean("taskExecutor")
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(200);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("taskExecutor-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }
    /**
     * 上面我们通过使用 ThreadPoolTaskExecutor创建了一个线程池,同时设置了以下这些参数:

     核心线程数10:线程池创建时候初始化的线程数
     最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
     缓冲队列200:用来缓冲执行任务的队列
     允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
     线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池
     线程池对拒绝任务的处理策略:这里采用了 CallerRunsPolicy策略,当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务
     */

}
/**
 * Created by zhiqi.shao on 2018/4/3.
 */
@Component
@Slf4j
public class Task {

    public static Random random = new Random();

    /**
     * 在定义了线程池之后,我们只需要在 @Async注解中指定线程池名即可,比如:
     * @throws Exception
     */

    @Async("taskExecutor")
    public void dotaskOne() throws Exception{
       log.info("任务一开始");
       long start= System.currentTimeMillis();
       Thread.sleep(random.nextInt(10000));
       long end=System.currentTimeMillis();
       log.info("完成任务一耗时:{} 毫秒",(end-start));
    }

    @Async("taskExecutor")
    public void dotaskTwo() throws Exception{
        log.info("任务二开始");
        long start= System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end=System.currentTimeMillis();
        log.info("完成任务二耗时:{} 毫秒",(end-start));
    }

    @Async("taskExecutor")
    public void dotaskThree() throws Exception{
        log.info("任务三开始");
        long start= System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end=System.currentTimeMillis();
        log.info("完成任务三耗时:{} 毫秒",(end-start));
    }
/**
 * Created by zhiqi.shao on 2018/4/3.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes =MytestApplication.class)
@WebAppConfiguration
public class TestAsync {

    @Autowired
    private Task task;

    @Test
    public void test() throws Exception{
        task.dotaskOne();
        task.dotaskTwo();
        task.dotaskThree();

        Thread.currentThread().join();
    }
}

最新文章

  1. iOS学习-压缩图片(改变图片的宽高)
  2. 研究Mysql优化得出一些建设性的方案
  3. Python学习笔记之条件、循环和其他语句
  4. 解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位
  5. C语言->实验室->指针数组
  6. Python爬虫(一) 信息系统集成及服务资质网
  7. C# Socket 入门3 UPD(转)
  8. C++学习笔记(三):数组
  9. 牵一发动全身【Nhibernate基本映射】
  10. Scrum【转】
  11. python中re正则表达式
  12. checkpoint NGFW VM安装
  13. php中出现乱码
  14. Go语言学习笔记(六) [包]
  15. [转]usdt omnicore testnet 测试网络
  16. MongoDB下Map-Reduce使用简单翻译及示例
  17. [转]C# 理解lock
  18. Java 使用 DBCP mysql 连接池 做数据库操作
  19. 解决eclipse Debug时提示source not found的问题
  20. android语音识别方法

热门文章

  1. SCU Censor
  2. hdu_2925_Musical Chairs_201311121643
  3. js中call()和apply()的区别
  4. SUSE Linux Enterprise Serve 12 试用体验
  5. 【LeetCode】Longest Substring Without Repeating Characters 解题报告
  6. 【转】】}linux awk 命令详解
  7. 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检測
  8. WCF学习笔记——契约不能少了set
  9. outlook创建收信规则,将收到的所有邮件,转发到qq邮箱,然后删除
  10. WingIDE4.1 破解及支持中文设置