https://www.jianshu.com/p/6f82b738ac58
核心参数
通过 ThreadPoolExecutor 创建线程池,有几个核心参数:
corePoolSize 线程池中的核心线程数量;
maximumPoolSize 当前线程池正在运行的最大线程数量;
keepAliveTime 超过 corePoolSize 线程数量的线程最大空闲时间;
unit 以秒为时间单位;
workQueue 创建工作队列,用于存放提交的等待执行任务;
所以有公司要求创建线程的时候,必须要按照这种方式来进行创建。
ExecutorService,有4种线程池可以进行创建,那么学会使用ThreadPoolExecutor的参数后,我们就可以不用局限于最上面那四种线程池,可以按照需要来构建自己的线程池。
newCachedThreadPool
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue
}
newFixedThreadPool
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue
}
newScheduledThreadPool
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}
public ScheduledThreadPoolExecutor(int corePoolSize) {
super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue());
}
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}
newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue
}
当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会创建新线程执行任务。
当workQueue未满,先放入到这个队列中。
workQueue它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种;
直接提交队列 SynchronousQueue
有界任务队列 ArrayBlockingQueue
无界任务队列 LinkedBlockingQueue
优先任务队列 PriorityBlockingQueue