线程池常见参数
线程池常见参数
1 | /** |
-
ThreadPoolExecutor3个最重要参数:corePoolSize:任务队列未达到队列容量时,最大可以同时运行的线程数量maximumPoolSize:任务队列达到队列容量时,当前可以同时运行的线程数量变为最大线程数workQueue:新任务来的时候会先判断是否达到核心线程数,如果达到,新任务就会被存放在队列中
-
ThreadPoolExecutor其他参数:keepAliveTime:当线程池中的线程数量大于corePoolSize,即有非核心线程(线程池中核心线程以外的线程)时,这些非核心线程空闲后不会立即销毁,而是会等待,直到等待的时间超过了keepAliveTime才会被回收销毁unit:keepAliveTime的时间单位threadFactory:线程工厂,用来创建线程,一般默认即可handler:拒绝策略,当提交的任务过多而不能及时处理时,我们可以定制策略来处理任务

- 线程池默认不会回收核心线程,但是如果线程池被用于周期性使用的场景,且频率不高,可以考虑使用
allowCoreThreadTimeOut(boolean value)参数设置为true,这样就会回收空闲的核心线程,时间间隔为keepAliveTime1
2
3
4
5
6
7
8
9
10
11
12
13
14public void allowCoreThreadTimeOut(boolean value) {
// 核心线程的 keepAliveTime 必须大于 0 才能启用超时机制
if (value && keepAliveTime <= 0) {
throw new IllegalArgumentException("Core threads must have nonzero keep alive times");
}
// 设置 allowCoreThreadTimeOut 的值
if (value != allowCoreThreadTimeOut) {
allowCoreThreadTimeOut = value;
// 如果启用了超时机制,清理所有空闲的线程,包括核心线程
if (value) {
interruptIdleWorkers();
}
}
}
