【Java】一文看懂Thread 线程池的 7 种创建方式、任务队列及自定义线程池(代码示例)
在Java中,创建线程池有多种方式,主要依赖于Executors
类提供的工厂方法。以下是创建线程池的7种方式,以及如何自定义线程池:
- 使用
Executors.newCachedThreadPool()
创建无限线程池。 - 使用
Executors.newFixedThreadPool(int nThreads)
创建固定大小的线程池。 - 使用
Executors.newSingleThreadExecutor()
创建单线程化的线程池。 - 使用
Executors.newScheduledThreadPool(int corePoolSize)
创建支持定时及周期性任务的线程池。 - 使用
Executors.newWorkStealingPool()
(JDK 1.8引入)创建自适应线程池。 - 使用
ThreadPoolExecutor
构造函数自定义线程池。 - 使用
ForkJoinPool
类创建分割任务的线程池(适用于使用ForkJoin
框架的情况)。
以下是创建线程池的示例代码:
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 1. 无限线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// 2. 固定大小线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);
// 3. 单线程化线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
// 4. 支持定时及周期性任务的线程池
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
// 5. 自适应线程池(JDK 1.8+)
ExecutorService workStealingPool = Executors.newWorkStealingPool();
// 6. 使用ThreadPoolExecutor自定义线程池
ThreadPoolExecutor customThreadPool = new ThreadPoolExecutor(
5, // 核心线程数
10, // 最大线程数
60L, // 空闲时间60秒
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100), // 任务队列
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
// 7. 使用ForkJoinPool创建分割任务的线程池(适用于使用ForkJoin框架的情况)
ForkJoinPool forkJoinPool = new ForkJoinPool(4);
// 关闭线程池
// cachedThreadPool.shutdown();
// fixedThreadPool.shutdown();
// singleThreadExecutor.shutdown();
//
评论已关闭