目录
线程池
线程池的核心类
Java 线程池的实现基于 java.util.concurrent
包,核心类和接口如下:
类/接口 | 说明 |
---|---|
Executor |
最基础的线程池接口,仅定义 execute(Runnable) 方法。 |
ExecutorService |
扩展了 Executor ,提供更丰富的线程池管理功能(如任务提交、关闭)。 |
ThreadPoolExecutor |
线程池的核心实现类,所有功能均通过此类实现。 |
ScheduledExecutorService |
支持定时任务和周期性任务的线程池接口。 |
Executors |
工厂类,提供快捷创建线程池的静态方法(如 newFixedThreadPool )。 |
ThreadPoolExecutor
的构造方法
ThreadPoolExecutor
的构造函数包含7个参数,以下是详细说明:
public ThreadPoolExecutor(
int corePoolSize, // 核心线程数
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 临时线程的空闲存活时间
TimeUnit unit, // 时间单位(秒、毫秒等)
BlockingQueue<Runnable> workQueue, // 任务队列
ThreadFactory threadFactory, // 线程工厂(自定义线程创建)
RejectedExecutionHandler handler // 拒绝策略
)
参数详解
corePoolSize
- 作用:线程池中始终保持存活的线程数量(即使空闲也不会被回收)。
- 示例:若设置为3,线程池最少有3个线程处理任务。
maximumPoolSize
- 作用:线程池允许创建的最大线程数(包括核心线程和临时线程)。
- 示例:若设置为10,当任务队列满时,最多创建10个线程。
keepAliveTime
+unit
- 作用:临时线程(超出核心线程数的线程)的空闲存活时间。超过该时间且无任务执行时,临时线程会被回收。
- 示例:
60, TimeUnit.SECONDS
表示临时线程空闲60秒后终止。
workQueue
- 作用:存储待执行任务的队列。
- 常用实现类:
ArrayBlockingQueue
:有界队列(需指定容量)。LinkedBlockingQueue
:无界队列(默认容量为Integer.MAX_VALUE
)。SynchronousQueue
:直接传递任务的队列(无存储能力)。
threadFactory
- 作用:自定义线程的创建方式(如设置线程名称、优先级)。
- 默认实现:
Executors.defaultThreadFactory()
。
handler
- 作用:当任务队列已满且线程数达到最大值时的拒绝策略。
- 内置策略:
AbortPolicy
(默认):抛出RejectedExecutionException
异常。CallerRunsPolicy
:由提交任务的线程直接执行任务。DiscardPolicy
:静默丢弃新任务。DiscardOldestPolicy
:丢弃队列中最旧的任务,然后重新提交新任务。
线程池的常用方法
提交任务
方法 | 说明 |
---|---|
void execute(Runnable task) |
提交一个无需返回值的任务(适合异步执行)。 |
Future<T> submit(Callable<T> task) |
提交一个有返回值的任务,通过 Future 获取结果或异常。 |
Future<?> submit(Runnable task) |
提交 Runnable 任务,返回的 Future 可用于判断任务是否完成。 |
示例:
ExecutorService executor = Executors.newFixedThreadPool(3);
// 使用 execute 提交任务(无返回值)
executor.execute(() ->