线程池

2019-06-10  本文已影响0人  yinhaijun

Executors提供的4种线程池

    Executor executorSingle = Executors.newSingleThreadExecutor();//返回一个线程
    Executor executorFixed = Executors.newFixedThreadPool(4);//返回固定数量的线程池
    Executor executorCached = Executors.newCachedThreadPool();//不限制最大线程数量,线程空闲后会被回收
    Executor executorScheduled = Executors.newScheduledThreadPool(4);//延迟执行

它们的核心构造器是ThreadPoolExecutor.java,所以了解了ThreadPoolExecutor就是了解了线程池的原理,如图所示

image.png

一个任务对应一个worker,核心线程足够的时候,优先使用核心线程执行,如果不够,加入阻塞队列中(用take方法依次执行),如果阻塞队列不够了,则启用最大线程(类似于临时工,这个是可以设置销毁的时间的),如果还不够,则执行RejectedExecutionHandler拒绝策略,这个需要开发自行去实现代码,对应到图中1、2、3、4步骤
如何合理配置线程池的参数
主要说下核心线程池的数量,首先分析当前任务的性质,是属于CPU密集型,还是IO密集型,
CPU密集型:每次任务时间短、任务量大
IO密集型:每次任务时间长、任务量一般
CPU密集型一般配置的CPU数量+1个核心线程

img
上一篇下一篇

猜你喜欢

热点阅读