Springboot中线程池的使用与应用

2022年7月14日10:13:34

1、线程池的类型

1:Executors.newSingleThreadExecutor()
corePoolSize和maximumPoolSize都为1,也就是创建了一个固定大小是1的线程池,workQueue是new LinkedBlockingQueue < Runnable >()是一种无界阻塞队列,队列的大小是Integer.MAX_VALUE,可以认为是队列的大小不限制。
由此可以得出通过该方法创建的线程池,每次只能同时运行一个线程,当有多个任务同时提交时,那也要一个一个排队执行

2:Executors.newFixedThreadPool(int nThreads)
创建了一个固定大小的线程池,可以指定同时运行的线程数量为nThreads。
3:Executors.newCachedThreadPool()
构造一个缓冲功能的线程池,配置corePoolSize=0,maximumPoolSize=Integer.MAX_VALUE,keepAliveTime=60s,以及一个无容量的阻塞队列 SynchronousQueue,因此任务提交之后,将会创建新的线程执行;线程空闲超过60s将会销毁
4:Executors.newScheduledThreadPool(int corePoolSize)
构造有定时功能的线程池,配置corePoolSize,无界延迟阻塞队列DelayedWorkQueue;maximumPoolSize=Integer.MAX_VALUE,由于DelayedWorkQueue是无界队列,所以这个值是没有意义的

2、TaskExecutor接口的实现类简要说明

1:SimpleAsyncTaskExecutor类 :这个实现不重用任何线程,或者说它每次调用都启动一个新线程,性能消耗比较严重。

2:ConcurrentTaskExecutor 类 :Spring 2.x借助ConcurrentTaskExecutor和ThreadPoolTaskExecutor能够通过IoC配置形式自定义它们暴露的各个属性。很少需要使用ConcurrentTaskExecutor,有另一个备选, ThreadPoolTaskExecutor类

3:ThreadPoolTaskExecutor 类 :ThreadPoolTaskExecutor内部对ThreadPoolExecutor进行了包装,同时提供能够通过IOC的形式来配置线程池的各个参数,比较常用

4:ThreadPoolTaskScheduler类 :ThreadPoolTaskScheduler内部对ScheduledThreadPoolExecutor进行了包装,除了能执行异步任务外支持定时/延迟任务的执行,属于一种高级特性

3、自定义ThreadPoolTaskExecutor

1)配置

@Configuration

@Beanpublic ThreadPoolTaskExecutormythreadpool(){
        ThreadPoolTaskExecutor threadPool=newThreadPoolTaskExecutor();//设置核心线程数
        threadPool.setCorePoolSize(5);//设置最大线程数
        threadPool.setMaxPoolSize(100);//设置线程超时等待时间
        threadPool.setKeepAliveSeconds(60);//设置任务等待队列的大小
        threadPool.setQueueCapacity(100);//设置线程池内线程的名称前缀---阿里编码规约推荐----出错了方便调试
        threadPool.setThreadNamePrefix("myThreadPool-");//设置任务拒绝策略
        threadPool.setRejectedExecutionHandler(newThreadPoolExecutor.AbortPolicy());//直接初始化
        threadPool.initialize();return threadPool;}

2)使用

// @Autowired@Resource(name="mythreadpool")private ThreadPoolTaskExecutor threadPoolTaskExecutor;
  • 作者:慕言手记
  • 原文链接:https://blog.csdn.net/sinat_28809019/article/details/119109861
    更新时间:2022年7月14日10:13:34 ,共 1878 字。