Executor Interfaces

java.util.concurrent包定义了三个执行程序interface:

  • Executor,一个简单的interface,支持启动新任务。

  • ExecutorServiceExecutor的子interface,它添加了有助于 管理 生命周期的功能,包括各个任务和执行程序本身。

  • ScheduledExecutorServiceExecutorService的子interface,支持将来和/或定期执行任务。

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

Actuator interface

Executorinterface提供了一个单一方法execute,旨在替代常见的线程创建习惯用法。如果rRunnable对象,而eExecutor对象,则可以替换

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

with

e.execute(r);

但是,execute的定义不太明确。低级成语创建一个新线程并立即启动它。取决于Executor的实现,execute可能执行相同的操作,但更可能使用现有的工作线程来运行r或将r放入队列中以 await 工作线程可用。 (我们将在Thread Pools的部分中描述工作线程。)

java.util.concurrent中的执行程序实现旨在充分利用更高级的ExecutorServiceScheduledExecutorServiceinterface,尽管它们也可以与基本Executorinterface一起使用。

ExecutorService interface

ExecutorServiceinterface以类似但更通用的submit方法对execute进行了补充。像execute一样,submit接受Runnable个对象,但也接受Callable个对象,这使任务可以返回值。 submit方法返回一个Future对象,该对象用于检索Callable返回值并 管理CallableRunnable任务的状态。

ExecutorService还提供了提交Callable个对象的大集合的方法。最后,ExecutorService提供了许多方法来 管理Actuator 的关闭。为了支持立即关闭,任务应正确处理interrupts

ScheduledExecutorService interface

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