java如何创建线程池
创建线程池的方法
在Java中,可以通过java.util.concurrent包中的ExecutorService接口及其实现类ThreadPoolExecutor来创建线程池。以下是几种常见的创建线程池的方式:
使用Executors工厂类创建线程池
Java提供了Executors工厂类,可以快速创建不同类型的线程池:

// 创建固定大小的线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
// 创建单线程的线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
// 创建可缓存的线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// 创建定时任务线程池
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
直接使用ThreadPoolExecutor创建线程池
如果需要更精细地控制线程池参数,可以直接使用ThreadPoolExecutor构造函数:
int corePoolSize = 5;
int maximumPoolSize = 10;
long keepAliveTime = 60;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(100);
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue
);
配置线程池参数
创建线程池时可以配置以下关键参数:

corePoolSize:核心线程数,即使空闲也会保留在线程池中maximumPoolSize:线程池允许的最大线程数keepAliveTime:非核心线程空闲时的存活时间unit:存活时间的单位workQueue:用于存放任务的阻塞队列threadFactory:用于创建新线程的工厂handler:当队列和线程池都满时的拒绝策略
使用线程池执行任务
创建线程池后,可以通过以下方法提交任务:
// 执行无返回值的任务
executor.execute(() -> {
System.out.println("Task executed");
});
// 执行有返回值的任务
Future<String> future = executor.submit(() -> {
return "Task result";
});
关闭线程池
使用完线程池后需要正确关闭:
// 平滑关闭,等待已提交任务完成
executor.shutdown();
// 立即关闭,尝试中断正在执行的任务
executor.shutdownNow();
注意事项
- 避免使用无界队列,可能导致内存溢出
- 根据任务类型合理设置线程池大小
- 考虑自定义拒绝策略处理任务满的情况
- 生产环境推荐直接使用
ThreadPoolExecutor而非Executors工厂方法






