java中executor是什么意思

Executor是Java并发包中抽象任务执行的核心接口,它将任务提交与线程管理解耦,避免手动创建和管理线程;常用实现为ExecutorService及其线程池,如newFixedThreadPool、newCachedThreadPool等。

Executor 是 Java 并发包(java.util.concurrent)中的一个核心接口,它的作用很简单:**把任务(Runnable)交给线程去执行,而你不用手动创建或管理线程**。

Executor 的本质是“执行器”

它抽象了“如何运行任务”这件事。你只管提交任务(比如一个 Runnable),它负责安排哪个线程、什么时候、用什么方式去跑。这就像把快递交给快递公司——你不用知道司机是谁、走哪条路,只关心货送到了没。

常见实现类:ExecutorService 和线程池

实际开发中,几乎不会直接用 Executor 接口,而是用它的子接口 ExecutorService,以及它的典型实现:

  • Executors.newFixedThreadPool(5):固定 5 个线程的池,适合负载稳定的任务
  • Executors.newCachedThreadPool():按需创建线程,空闲 60 秒自动回收,适合大量短时任务
  • Executors.newSingleThreadExecutor():只有一个线程,保证任务串行执行
  • ForkJoinPool.commonPool():专为分治任务(如并行流)优化的池

为什么不用 new Thread().start()?

直接 new 线程看似简单,但问题不少:

  • 频繁创建销毁线程开销大(内存、CPU、上下文切换)
  • 没有统一管理,容易失控(比如起几百个线程把系统拖垮)
  • 缺少队列、拒绝策略、生命周期控制等能力
  • 无法获取执行结果(ExecutorService 可以通过 submit(Callable) 返回 Future

一个最简例子

不用管线程怎么建、怎么活,只要交任务:

Executor executor = Executors.newFixedThreadPool(2);
executor.execute(() -> System.out.println("我在后台跑了")); // 无返回值
// 记得用完 shutdown() 释放资源

基本上就这些。Executor 不是魔法,但它把并

发中最麻烦的线程生命周期和调度逻辑封装起来了,让你专注业务逻辑本身。