ExecutorService 和 Thread 都用于并发执行任务,但它们定位、使用方式和能力完全不同。可以简单理解为:
Thread 是线程本身,ExecutorService 是线程的管理和调度框架。
下面从多个维度对比说明。
| 对比点 | Thread | ExecutorService |
|---|---|---|
| 本质 | 线程对象 | 线程池 / 执行器 |
| 是否推荐 | ❌ 不推荐直接使用 | ✅ 推荐 |
| 任务提交方式 | 继承 / 实现 Runnable | 提交 Callable / Runnable |
| 线程复用 | ❌ 不复用 | ✅ 复用线程 |
| 生命周期管理 | 手动控制 | 统一管理 |
| 返回值 | 无 | 支持 Future |
| 异常处理 | 较麻烦 | 更规范 |
| 适合场景 | 简单、一次性 | 并发、任务多、生产环境 |
Thread t = new Thread(() -> {
System.out.println("Thread running");
});
t.start();
Thread = 一个线程ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() -> {
System.out.println("Task running");
});
executor.shutdown();
// 无法直接拿到结果
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> 1 + 2);
Integer result = future.get(); // 3
// 需要自己控制
t.interrupt();
executor.shutdown(); // 平缓关闭
executor.shutdownNow(); // 立即关闭
| 方面 | Thread | ExecutorService |
|---|---|---|
| 异常捕获 | 不统一 | 可在 Future 中捕获 |
| 资源释放 | 手动 | 统一关闭 |
| 并发控制 | 困难 | 内置 |
Thread 是“干活的线程”,ExecutorService 是“管理线程干活的工厂”。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。