java.util.concurrent包定义了三个执行器接口:

  • Executor,一个简单的接口,支持启动新任务。
  • ExecutorService,是Executor的子接口,它添加了有助于管理生命周期的功能,包括各个任务和执行器本身。
  • ScheduledExecutorService,是ExecutorService的子接口,支持将来和/或定期执行任务。

通常,引用执行器对象的变量被声明为这三种接口类型之一,而不是执行器类类型。

Executor接口

Executor接口提供了一种单一方法execute,旨在替代常见的线程创建惯用语。如果rRunnable对象,并且eExecutor可以替换的对象
Executor接口提供了一种execute方法,旨在替代常用的线程创建习惯用法。 如果rRunnable对象,而eExecutor对象,则可以替换

  1. (new Thread(r)).start();

  1. e.execute(r);

但是,execute的定义不太明确。 低级方法创建一个新线程并立即启动它。 取决于Executor的实现,execute可能执行相同的操作,但是更有可能使用现有的工作线程来运行r,或将r放入队列中以等待工作线程可用。 (我们将在“线程池”部分中描述辅助线程。)
尽管java.util.concurrent中的执行器实现也与基本Executor接口一起使用,但它们的设计目的是充分利用更高级的ExecutorServiceScheduledExecutorService接口。

ExecutorService接口

ExecutorService接口补充了一种类似execute但功能更广泛的submit方法。 与execute一样,submit接受Runnable对象,但也接受Callable对象,后者允许任务返回值。 submit方法返回一个Future对象,该对象用于检索Callable返回值并管理CallableRunnable任务的状态。
ExecutorService还提供用于提交大量Callable对象的方法。 最后,ExecutorService提供了许多方法来管理执行器的关闭。 为了支持立即关闭,任务应正确处理中断

ScheduledExecutorService接口

ScheduledExecutorService接口使用schedule补充其父ExecutorService的方法,schedule在指定的延迟后执行RunnableCallable任务。 另外,该接口定义了scheduleAtFixedRatescheduleWithFixedDelay,它们以定义的间隔重复执行指定的任务。