ThreadPoolExecutor和ExecutorService有怎样的关系?ThreadPoolExecutor的构造方法是怎样的?试对ThreadPoolExecutor构造方法的参数加以说明。
时间: 2024-06-13 07:03:03 浏览: 103
线程池ThreadPoolExecutor
5星 · 资源好评率100%
ThreadPoolExecutor和ExecutorService是Java并发编程中两个相关的接口和实现类。ThreadPoolExecutor是Java并发包`java.util.concurrent`中的一个工具类,用于管理一组可重用的线程,这些线程在执行任务时可以从任务队列中获取并执行。ExecutorService是一个更一般的接口,它定义了一组操作,包括提交任务、取消任务和查询任务状态。
它们的关系是:ThreadPoolExecutor是ExecutorService的一个具体实现。当你创建一个ThreadPoolExecutor实例时,实际上你得到了一个ExecutorService的实例,可以使用ExecutorService的所有方法来处理任务。
ThreadPoolExecutor的构造方法如下:
```java
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
```
参数说明:
1. `corePoolSize`:核心线程数,当工作队列满且没有空闲线程时,新任务会排队等待。
2. `maximumPoolSize`:最大线程数,除非队列已满,否则当所有核心线程都处于活动状态时,此值限制了新任务的添加。
3. `keepAliveTime`:空闲线程存活时间,超过这个时间的线程将被终止,除非有新的任务可用。
4. `unit`:`keepAliveTime`的时间单位,如Seconds、Milliseconds等。
5. `workQueue`:工作队列,存储待处理的任务,可以选择`ArrayBlockingQueue`、`LinkedBlockingQueue`等。
6. `threadFactory`:线程工厂,用于创建新线程的工厂,可以自定义线程名称、优先级等属性。
7. `handler`:拒绝策略,当工作队列已满且无法接受新任务时,如何处理新提交的任务,比如`AbortPolicy`(抛出异常)、`CallerRunsPolicy`(在调用者线程中运行)等。
阅读全文