答案:Java中通过Executors.newFixedThreadPool(3)创建固定线程池,提交5个任务由3个线程执行,任务超出线程数时进入无界队列等待,使用shutdown()关闭线程池并配合awaitTermination()确保任务完成,避免资源泄漏。

在Java中,使用 ExecutorService 实现固定线程池非常简单,主要通过 Executors 工具类的 newFixedThreadPool 方法来创建。这种方式可以限制同时运行的线程数量,适用于负载较稳定、任务数量可控的场景。
创建固定线程池
调用 Executors.newFixedThreadPool(int nThreads) 方法即可创建一个指定线程数的线程池:
- nThreads 表示核心线程数量,这些线程会一直存活,除非显式关闭线程池
- 多余的任务会被放入一个无界队列中等待执行
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
// 创建一个包含3个线程的固定线程池
ExecutorService executor = Executors.newFixedThreadPool(3);
// 提交5个任务
for (int i = 1; i <= 5; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("任务 " + taskId + " 正在由线程 " + Thread.currentThread().getName() + " 执行");
try {
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("任务 " + taskId + " 完成");
});
}
// 关闭线程池
executor.shutdown();
try {
if (!executor.awaitTermination(60, java.util.concurrent.TimeUnit.SECONDS)) {
executor.shutdownNow();
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
}
}
关键方法说明
理解以下几个核心方法有助于正确使用线程池:
iWebMall 是一款高性能高扩展能力的开源 LAMP 电子商务软件,定位为大中型电子商务平台软件,服务于有建立电子商务需求的商业客户。这些商业客户不必学习任何计算机编程代码知识,只需要使用 iWebMall 软件他们就可以轻松建立一个功能强大的网上商城,实现用户注册、产品展示、在线定购、在线支付等电子商务功能;iWebMall 集成了产品发布与查询、会员注册登录、购物车、在线订单、在线支付、在
- submit(Runnable task):提交一个无返回值的任务
- submit(Callable task):提交一个有返回值的任务
- shutdown():启动有序关闭,不再接受新任务,但已提交的任务会继续执行
- awaitTermination():阻塞等待所有任务完成,常用于确保资源安全释放
- shutdownNow():尝试立即停止所有正在执行的任务
使用建议与注意事项
虽然 newFixedThreadPool 使用方便,但在实际开发中需要注意以下几点:
立即学习“Java免费学习笔记(深入)”;
- 避免使用默认的无界队列,任务过多可能导致内存溢出
- 生产环境推荐使用 ThreadPoolExecutor 显式构造线程池,便于控制队列大小、拒绝策略等参数
- 每次使用完线程池后必须调用 shutdown(),防止资源泄漏
- 注意处理任务中的异常,未捕获的异常可能导致任务静默失败









