Java中的线程池,7个重要参数详解
1. corePoolSize(核心线程数)
corePoolSize表示线程池中保持活动状态的核心线程数量。即使这些线程处于空闲状态,它们也会被保留在线程池中,直到它们超时为止。如果设置的值小于0,则抛出`IllegalArgumentException`。
2. maximumPoolSize(最大线程数)
maximumPoolSize代表线程池中允许的最大线程数。当活动任务的数量超过corePoolSize时,线程池会创建新线程来处理新的任务,直到达到这个限制。如果设置的值小于等于0或大于`Integer.MAX_VALUE`,则抛出`IllegalArgumentException`。
3. keepAliveTime(存活时间)
keepAliveTime是指当线程池中的线程数超过corePoolSize时,多余的空闲线程将在终止之前等待多长时间。单位可以是毫秒或秒。对于允许核心线程超时的线程池,此参数也适用于核心线程。
4. unit(时间单位)
unit是keepAliveTime的时间单位,可以是` TimeUnit.NANOSECONDS`、`TimeUnit.MICROSECONDS`、`TimeUnit.MILLISECONDS`、`TimeUnit.SECONDS`、`TimeUnit.MINUTES`、`TimeUnit.HOURS` 或 `TimeUnit.DAYS`。
5. workQueue(工作队列)
workQueue是用于保存等待执行任务的阻塞队列。可以选择不同的阻塞队列类型,`ArrayBlockingQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`等,它们各自有不同的特性和用途。
6. threadFactory(线程工厂)
threadFactory是用于创建新线程的对象。通常情况下,可以通过自定义线程工厂来自定义线程名称、优先级、守护状态等属性。
7. handler(拒绝策略)
handler是在无法接受新任务时(通常是由于线程池和工作队列都已满)采取的处理策略。常见的拒绝策略包括`AbortPolicy`(默认策略,抛出异常)、`CallerRunsPolicy`(由调用者所在的线程来运行任务)、`DiscardOldestPolicy`(丢弃队列中最老的任务)和`DiscardPolicy`(直接丢弃任务)。
通过合理配置这七个参数,我们可以创建出符合特定应用场景需求的线程池,从而有效地利用系统资源,提升程序的性能和稳定性。