ExecutorService 和 Thread 是 Java 并发编程中两个不同层次的概念,主要区别体现在抽象层级、使用方式、资源管理、功能能力等方面。
Thread 是 Java 对操作系统线程的直接封装Thread 对象通常对应一个操作系统线程Thread t = new Thread(() -> {
System.out.println("run");
});
t.start();
ExecutorService 是 Java 并发框架(java.util.concurrent)的一部分ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> {
System.out.println("run");
});
| 对比项 | Thread | ExecutorService |
|---|---|---|
| 抽象层级 | 底层 | 高层 |
| 是否线程池 | ❌ 否 | ✅ 是 |
| 线程复用 | ❌ 每次新建 | ✅ 可复用 |
| 生命周期管理 | 手动 | 自动 |
| 任务提交方式 | 只能 run | submit / execute |
| 返回值 | 无 | 可返回 Future |
| 异常处理 | 简单 | 更完善 |
| 适用场景 | 简单/学习 | 生产环境 |
Thread t = new Thread(task);
t.start();
// 线程结束就销毁,不能复用
ExecutorService pool = Executors.newCachedThreadPool();
pool.execute(task);
pool.submit(callable);
pool.shutdown();
你不需要关心线程怎么创建、谁在执行。
✅ 生产环境几乎都用 ExecutorService
Callable 并获取返回值(Future)invokeAll)ScheduledExecutorService)Thread 是“干活的工人”,ExecutorService 是“管理工人的工厂”
✅ 实际开发:
ExecutorServicenew Thread().start()Executors 的默认方法)ExecutorService pool = new ThreadPoolExecutor(
4, 8, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100)
);
如果你愿意,我也可以帮你画一张对比图或结合源码讲线程池原理。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。