ExecutorService 和 Thread 是 Java 并发编程中两个不同层次的概念,主要区别体现在抽象层次、使用方式、资源管理、功能能力等方面。
Thread 是 Java 对操作系统线程的直接封装Thread 对象通常对应一个真实的操作系统线程Thread t = new Thread(() -> {
System.out.println("run");
});
t.start();
ExecutorService 是 线程池框架(java.util.concurrent)的一部分ThreadExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> {
System.out.println("run");
});
| 对比项 | Thread | ExecutorService |
|---|---|---|
| 抽象层级 | 底层 | 高层 |
| 线程管理 | 手动创建/启动/销毁 | 自动管理线程池 |
| 线程复用 | ❌ 每次 new Thread | ✅ 线程可复用 |
| 任务提交方式 | 只能 run/start | submit / execute |
| 返回值 | 无 | 可返回 Future |
| 异常处理 | 较原始 | 更完善 |
| 关闭方式 | 靠线程结束 | shutdown / shutdownNow |
| 适合场景 | 学习 / 简单 demo | 生产环境 / 高并发 |
new Thread(() -> { ... }).start();
ExecutorService pool = Executors.newFixedThreadPool(10);
// 1000 个任务,只用 10 个线程
Future<Integer> f = executor.submit(() -> 1 + 1);
Integer result = f.get();
executor.shutdown();
✅ 实际开发中:
new Thread()ExecutorService / 线程池⚠️ 即使是 Executors,也要注意:
// 不推荐(可能 OOM)
Executors.newCachedThreadPool();
// 推荐(手动控制)
new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>()
);
Thread 是“干活的工人”,ExecutorService 是“管理工人的工厂”
如果你愿意,我也可以帮你画一张线程池结构图,或者用生活类比再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。