Java并发编程之ThreadPoolExecutor构造

一、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.SECONDSTimeUnit.MILLISECONDS 等。

workQueue
存储等待执行的任务队列。
如果任务提交速度超过线程池处理速度,未处理的任务会存放在队列中。
常见的队列实现包括 ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue 等。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值