首页 > 编程语言 > 详细

线程池的理解与应用

时间:2020-12-28 14:26:11      阅读:31      评论:0      收藏:0      [点我收藏+]

目录

  1. 线程池的理解(简单概述)
  2. Async线程池(加配置)
  3. Scheduled(加配置)
  4. 线程池使用的五种配置四种策略

 

一. 线程池的理解

  单体的线程每次请求频繁的创建,请求过后频繁的销毁,导致线程栈中的资源的大量消耗。

  线程池的出现在于对单体线程的可控性,管理资源的消耗。

 

二. Async的线程池

  使用异步去配置线程池的话,如图

技术分享图片

 

 

  此时此刻,没有指定Bean的名字,出现一个问题就是启动默认的Async线程池了,并且没有走你自己配置的线程池

技术分享图片

 

 

    

 走配置的话需要指定Bean名称,让他去覆盖

  

 1  @Bean("taskExecutor")
 2     public AsyncTaskExecutor getAsyncE(){
 3         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
 4         executor.setCorePoolSize(coreSize);
 5         executor.setMaxPoolSize(maxSize);
 6         executor.setQueueCapacity(queueSize);
 7         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
 8         executor.setThreadNamePrefix("MyThread-");
 9         return executor;
10     }

打印如图

技术分享图片

 

 

 

三. Scheduled(配置)

不需要指定Bean名称,如果不指定池子的大小默认为1

 1  @Bean
 2     public ThreadPoolTaskScheduler getTaskScheduled(){
 3         ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
 4         //配置池子的大小
 5         taskScheduler.setPoolSize(20);
 6         //拒绝策略为 抛出异常
 7         taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
 8         //设置名字
 9         taskScheduler.setThreadNamePrefix("MyScheduled-");
10         return taskScheduler;
11     }

 

四. 线程池的五种配置

  1. newSingleThreadPoolExecutor
  2. newFixedThreadPoolExecutor
  3. newCachedThreadPoolExecutor
  4. newScheduledThreadPoolExecutor
  5. ThreadPoolExecutor

 底层全是ThreadPoolExecutor,默认策拒绝略都是AbortPolicy,LinkedBlockingQueue=Integer_Max_Value

 

1. newSingleThreadPoolExecutor  -->  coreSize=1,maxSize=1

技术分享图片

技术分享图片

 

 

 

2. newFixedThreadPoolExecutor  -->   coreSize = maxSize = 固定自己写入 = 5

技术分享图片

 技术分享图片

 

 

 

3. newCachedThreadPoolExecutor  -->   coreSize = 0,maxSize = Integer_Max_Value 

技术分享图片

 

 技术分享图片

 

 

4. newScheduledThreadPoolExecutor  -->  coreSize 默认为1 ,maxSize = Integer_max_value

技术分享图片

 

 技术分享图片

 

 

技术分享图片

技术分享图片

 

 

5. ThreadPoolExecutor

技术分享图片

技术分享图片

 

 四种策略

  1. AbortPolicy --> 拒绝直接抛出异常
  2. CallerRunsPolicy  --> 拒绝策略为谁发来的返回给谁自己做
  3. DiscardOrdestPolicy  --> 丢弃最老的任务,排进去新任务
  4. DiscardPolicy  --> 直接丢弃任务

 

 

  

 

 

 

  

  

线程池的理解与应用

原文:https://www.cnblogs.com/honour1207/p/14201003.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!