验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

ExecutorService和Thread区别

阅读:89 来源:乙速云 作者:代码code

ExecutorService和Thread区别

ExecutorServiceThread 都用于并发执行任务,但它们定位、使用方式和能力完全不同。可以简单理解为:

Thread 是线程本身,ExecutorService 是线程的管理和调度框架。

下面从多个维度对比说明。


一、核心区别概览

对比点 Thread ExecutorService
本质 线程对象 线程池 / 执行器
是否推荐 ❌ 不推荐直接使用 ✅ 推荐
任务提交方式 继承 / 实现 Runnable 提交 Callable / Runnable
线程复用 ❌ 不复用 ✅ 复用线程
生命周期管理 手动控制 统一管理
返回值 支持 Future
异常处理 较麻烦 更规范
适合场景 简单、一次性 并发、任务多、生产环境

二、Thread 示例

Thread t = new Thread(() -> {
    System.out.println("Thread running");
});
t.start();

特点

  • 一个 Thread = 一个线程
  • 任务执行完,线程就结束了
  • 频繁创建 / 销毁线程 性能差

缺点

  • 无法复用线程
  • 不好控制线程数量
  • 不适合大量任务

三、ExecutorService 示例

ExecutorService executor = Executors.newFixedThreadPool(3);

executor.submit(() -> {
    System.out.println("Task running");
});

executor.shutdown();

特点

  • 内部维护 线程池
  • 任务提交后由线程池调度
  • 线程可复用
  • 支持关闭、监控、批量任务

四、返回值对比(Callable)

Thread(不支持返回值)

// 无法直接拿到结果

ExecutorService(支持)

ExecutorService executor = Executors.newSingleThreadExecutor();

Future future = executor.submit(() -> 1 + 2);

Integer result = future.get(); // 3

五、线程管理对比

Thread

// 需要自己控制
t.interrupt();

ExecutorService

executor.shutdown();        // 平缓关闭
executor.shutdownNow();     // 立即关闭

六、异常与资源管理

方面 Thread ExecutorService
异常捕获 不统一 可在 Future 中捕获
资源释放 手动 统一关闭
并发控制 困难 内置

七、什么时候用哪个?

✅ 用 ExecutorService

  • 任务多
  • 需要并发
  • 需要返回值
  • 生产环境
  • Web / 服务程序

✅ 用 Thread(很少)

  • 学习线程原理
  • 简单一次性任务
  • 底层定制(如 AQS、Netty)

八、一句话总结

Thread 是“干活的线程”,ExecutorService 是“管理线程干活的工厂”。

如果你愿意,我也可以:

  • 线程池原理
  • 对比 Executors 和 ThreadPoolExecutor
  • 结合 实际业务场景 给你选型建议
分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>