ThreadPoolExecutor
是 Java 中用于创建和管理线程池的强大工具。它允许你自定义线程池的各种参数,如核心线程数、最大线程数、线程空闲时间等。下面是 ThreadPoolExecutor
的基本用法:
1. 创建 ThreadPoolExecutor
可以通过直接实例化 ThreadPoolExecutor
类来创建线程池。
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
// 创建 ThreadPoolExecutor
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, // 核心线程数
5, // 最大线程数
60, // 线程空闲时间
TimeUnit.SECONDS, // 时间单位
new LinkedBlockingQueue<>() // 任务队列
);
// 提交任务给线程池
executor.submit(() -> {
System.out.println("Task executed by thread: " + Thread.currentThread().getName());
});
// 关闭线程池
executor.shutdown();
}
}
2. 自定义拒绝策略
如果线程池无法处理新提交的任务,可以自定义拒绝策略来处理这种情况。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
3. 自定义线程工厂
你也可以自定义线程工厂,以便在创建新线程时有更多的控制。
executor.setThreadFactory(new CustomThreadFactory());
4. 其他配置参数
ThreadPoolExecutor
还提供了许多其他参数,如等待队列、拒绝策略等,你可以根据需求进行配置。
注意事项:
- 核心线程数、最大线程数、线程空闲时间等参数应根据实际情况进行调优,以达到最佳性能。
- 线程池的任务队列应根据实际负载选择合适的类型,如
LinkedBlockingQueue
、ArrayBlockingQueue
等。 - 在使用完线程池后,记得调用
shutdown()
方法来关闭线程池,释放资源。
通过以上方法,你可以使用 ThreadPoolExecutor
创建一个灵活、可定制的线程池,满足你的具体需求。