java线程池如何调用
线程池的基本概念
Java线程池通过java.util.concurrent包中的ExecutorService和ThreadPoolExecutor实现,用于管理线程的生命周期和任务调度,避免频繁创建销毁线程的开销。
创建线程池
通过Executors工厂类提供的方法创建不同类型的线程池:
- 固定大小线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); // 指定线程数 - 单线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); - 可扩容线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 空闲线程自动回收 - 定时任务线程池
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
自定义线程池
通过ThreadPoolExecutor构造函数自定义参数(核心线程数、最大线程数、空闲时间、任务队列等):

ThreadPoolExecutor customPool = new ThreadPoolExecutor(
2, // 核心线程数
10, // 最大线程数
60, TimeUnit.SECONDS, // 空闲线程存活时间
new LinkedBlockingQueue<>(100) // 任务队列
);
提交任务到线程池
- 执行无返回值任务
executorService.execute(() -> System.out.println("Task running")); - 执行有返回值任务
Future<String> future = executorService.submit(() -> "Result"); String result = future.get(); // 阻塞获取结果 - 定时任务
scheduledThreadPool.schedule( () -> System.out.println("Delayed task"), 5, TimeUnit.SECONDS // 延迟5秒执行 );
关闭线程池
- 优雅关闭
executorService.shutdown(); // 停止接收新任务,等待已提交任务完成 - 强制关闭
executorService.shutdownNow(); // 尝试中断所有任务
注意事项
- 避免使用
Executors.newFixedThreadPool或newCachedThreadPool时未限制队列大小,可能导致内存溢出。 - 任务中需处理
InterruptedException以响应中断。 - 使用
Future.get()时设置超时时间,防止长时间阻塞。
通过合理配置线程池参数(如队列类型、拒绝策略),可优化系统资源使用和任务处理效率。






