一、ThreadPoolExecutor 参数
ThreadPoolExecutor
的构造方法参数如下:
public ThreadPoolExecutor(
int corePoolSize, // 核心线程数
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 空闲线程超时时间
TimeUnit unit, // 时间单位
BlockingQueue<Runnable> workQueue, // 任务队列
ThreadFactory threadFactory, // 线程工厂
RejectedExecutionHandler<Runnable> handler // 拒绝策略
) {
// 构造方法实现
}
corePoolSize
:
线程池中的核心线程数。
这些线程会一直存在,即使空闲,除非设置了 keepAliveTime
。
新任务会优先分配给核心线程。
maximumPoolSize
:
线程池中允许的最大线程数。
如果任务队列满了,并且当前线程数 < maximumPoolSize
,则会创建新线程处理任务。
keepAliveTime
:
空闲线程在超过 corePoolSize
的线程保留的时间。
如果线程池中的线程数 > corePoolSize
,且某个线程在 keepAliveTime
时间内没有任务执行,则该线程会被回收。
unit
:
时间单位,用于解释 keepAliveTime
的单位。
常见的单位包括 TimeUnit.SECONDS
、TimeUnit.MILLISECONDS
等。
workQueue
:
存储等待执行的任务队列。
如果任务提交速度超过线程池处理速度,未处理的任务会存放在队列中。
常见的队列实现包括 ArrayBlockingQueue
、LinkedBlockingQueue
、SynchronousQueue
等。
threadFactory
:
用于创建线程池中线程的工厂。
可以自定义线程名称、优先级等属性。
handler
:
当线程池无法处理新任务时(队列已满且线程数已达到 maximumPoolSize
),会调用拒绝策略。
常见的拒绝策略包括 CallerRunsPolicy
(提交任务的线程自己执行)、AbortPolicy
(直接抛异常)等。
二、newFixedThreadPool 的构造方法参数
newFixedThreadPool
实际上是 ThreadPoolExecutor
的一个快捷配置:
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(
nThreads, // corePoolSize
nThreads, // maximumPoolSize
0L, // keepAliveTime(无效,因为线程只会在队列满时创建)
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(Integer.MAX_VALUE), // 无界队列
Executors.defaultThreadFactory(),
new AbortPolicy() // 默认拒绝策略
);
}
参数:
corePoolSize
:固定线程数 nThreads
。
maximumPoolSize
:与 corePoolSize
相同。
keepAliveTime
:设置为 0L
,表示空闲线程不会被回收。
workQueue
:使用无界队列 LinkedBlockingQueue
。
threadFactory
:默认线程工厂,线程名称格式为 pool-N-thread-M
。
handler
:默认拒绝策略为 AbortPolicy
,会抛出 RejectedExecutionException
。
三、newCachedThreadPool 的构造方法参数
newCachedThreadPool
实际上是 ThreadPoolExecutor
的另一种快捷配置:
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(
0, // corePoolSize
Integer.MAX_VALUE, // maximumPoolSize
60L, // keepAliveTime(空闲线程保留时间)
TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(), // 无缓冲队列
Executors.defaultThreadFactory(),
new AbortPolicy() // 默认拒绝策略
);
}
参数:
corePoolSize
:设置为 0
,表示没有核心线程,线程不会被长期保留。
maximumPoolSize
:设置为 Integer.MAX_VALUE
,表示线程数可以无限扩展。
keepAliveTime
:空闲线程会在 60 秒后被回收。
workQueue
:使用无缓冲队列 SynchronousQueue
,任务直接提交给线程。
threadFactory
:默认线程工厂,线程名称格式为 pool-N-thread-M
。
handler
:默认拒绝策略为 AbortPolicy
。
四、newSingleThreadExecutor 的构造方法参数
newSingleThreadExecutor
实际上是 ThreadPoolExecutor
的单线程特殊配置:
public static ExecutorService newSingleThreadExecutor() {
return new ThreadPoolExecutor(
1, // corePoolSize
1, // maximumPoolSize
0L, // keepAliveTime(无效,因为线程只会在队列满时创建)
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(Integer.MAX_VALUE), // 无界队列
Executors.defaultThreadFactory(),
new AbortPolicy() // 默认拒绝策略
);
}
参数:
corePoolSize
:设置为 1
,表示只有一个核心线程。
maximumPoolSize
:与 corePoolSize
相同。
keepAliveTime
:设置为 0L
,表示空闲线程不会被回收。
workQueue
:使用无界队列 LinkedBlockingQueue
。
threadFactory
:默认线程工厂,线程名称格式为 pool-N-thread-M
。
handler
:默认拒绝策略为 AbortPolicy
。