关于线程池参数的选择
常见的线程池定义方法
- FixedThreadPool:
- 场景:适用于处理固定数量的并发任务,例如服务器处理固定数量的请求线程。
- CachedThreadPool:
- 场景:适用于执行大量短期异步任务,例如处理异步 I/O 操作。
- SingleThreadExecutor:
- 场景:适用于需要保证任务按顺序执行的场景,例如日志记录。
- ScheduledThreadPool:
- 场景:适用于需要定时或周期性执行任务的场景,例如定时任务调度。
自定义ThreadPoolExecutor的各个参数
**
corePoolSize
**(20):- 核心线程数,当有新任务到达时,即使这些线程是空闲的,也不会被销毁。
**
maximumPoolSize
**(100):- 线程池中允许的最大线程数。当任务队列已满时,只有超过核心线程数的线程会根据需要创建和销毁。
**
keepAliveTime
**(5):- 线程池中超过
corePoolSize
的空闲线程在终止前等待新任务的最长时间。
- 线程池中超过
**
unit
**(TimeUnit.SECONDS):keepAliveTime
的时间单位,此处为秒。
**
workQueue
**(new LinkedBlockingDeque<>(40)):- 用于存储等待执行任务的队列。
LinkedBlockingDeque
是一个双端阻塞队列,容量为 40。
- 用于存储等待执行任务的队列。
**
threadFactory
**(Executors.defaultThreadFactory()):- 线程工厂,用于创建新线程。你可以使用
Executors.defaultThreadFactory()
提供的默认工厂,也可以自定义一个ThreadFactory
实现来配置新线程的创建方式(例如设置线程名称、线程优先级、是否是守护线程等)。
- 线程工厂,用于创建新线程。你可以使用
**
handler
**(new ThreadPoolExecutor.CallerRunsPolicy()):拒绝策略,当线程池和队列都满了,无法处理新的任务时,选择如何处理新提交的任务。
ThreadPoolExecutor
提供了四种内置的拒绝策略:
- **
AbortPolicy
**:默认策略,直接抛出RejectedExecutionException
异常。 - **
CallerRunsPolicy
**:调用者运行策略,调用执行任务的线程自己来运行这个任务。 - **
DiscardPolicy
**:丢弃策略,直接丢弃无法处理的任务。 - **
DiscardOldestPolicy
**:丢弃最旧任务策略,丢弃队列中最旧的未处理任务,然后尝试重新提交新任务。
- **
- Post title:关于线程池参数的选择
- Post author:秋水
- Create time:2024-07-06 19:36:33
- Post link:tai769.github.io2024/07/06/关于线程池参数的选择/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.