一、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。
389

被折叠的 条评论
为什么被折叠?



