Executor Interfaces
java.util.concurrent
包定义了三个执行程序interface:
-
Executor
,一个简单的interface,支持启动新任务。 -
ExecutorService
是Executor
的子interface,它添加了有助于 管理 生命周期的功能,包括各个任务和执行程序本身。 -
ScheduledExecutorService
是ExecutorService
的子interface,支持将来和/或定期执行任务。
通常,引用执行程序对象的变量被声明为这三种interface类型之一,而不是执行程序类类型。
Actuator interface
Executorinterface提供了一个单一方法execute
,旨在替代常见的线程创建习惯用法。如果r
是Runnable
对象,而e
是Executor
对象,则可以替换
(new Thread(r)).start();
with
e.execute(r);
但是,execute
的定义不太明确。低级成语创建一个新线程并立即启动它。取决于Executor
的实现,execute
可能执行相同的操作,但更可能使用现有的工作线程来运行r
或将r
放入队列中以 await 工作线程可用。 (我们将在Thread Pools的部分中描述工作线程。)
java.util.concurrent
中的执行程序实现旨在充分利用更高级的ExecutorService
和ScheduledExecutorService
interface,尽管它们也可以与基本Executor
interface一起使用。
ExecutorService interface
ExecutorServiceinterface以类似但更通用的submit
方法对execute
进行了补充。像execute
一样,submit
接受Runnable
个对象,但也接受Callable个对象,这使任务可以返回值。 submit
方法返回一个Future对象,该对象用于检索Callable
返回值并 管理Callable
和Runnable
任务的状态。
ExecutorService
还提供了提交Callable
个对象的大集合的方法。最后,ExecutorService
提供了许多方法来 管理Actuator 的关闭。为了支持立即关闭,任务应正确处理interrupts。
ScheduledExecutorService interface
ScheduledExecutorServiceinterface使用schedule
补充其父ExecutorService
的方法,该interface在指定的延迟后执行Runnable
或Callable
任务。另外,该interface定义了scheduleAtFixedRate
和scheduleWithFixedDelay
,它们以定义的间隔重复执行指定的任务。