-
- All Known Subinterfaces:
-
ExecutorService
,ScheduledExecutorService
public interface Executor
执行提交的对象Runnable
任务。 该接口提供了一种将任务提交从每个任务的运行Executor
方法,包括线程使用,调度等细节。通常使用Executor
而不是显式创建线程。 例如,不是为一组任务调用new Thread(new RunnableTask()).start()
,而是可以使用:Executor executor = anExecutor(); executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ...
Executor
接口并不要求执行异步。 在最简单的情况下,执行程序可以立即在调用者的线程中运行提交的任务:class DirectExecutor implements Executor { public void execute(Runnable r) { r.run(); } }
class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) { new Thread(r).start(); } }
Executor
实施对如何和何时安排任务施加某种限制。 下面的执行者将任务的提交序列化到第二个执行者,说明复合执行器。class SerialExecutor implements Executor { final Queue<Runnable> tasks = new ArrayDeque<>(); final Executor executor; Runnable active; SerialExecutor(Executor executor) { this.executor = executor; } public synchronized void execute(Runnable r) { tasks.add(() -> { try { r.run(); } finally { scheduleNext(); } }); if (active == null) { scheduleNext(); } } protected synchronized void scheduleNext() { if ((active = tasks.poll()) != null) { executor.execute(active); } } }
Executor
实现实现了ExecutorService
,这是一个更广泛的界面。ThreadPoolExecutor
类提供了一个可扩展的线程池实现。Executors
类为这些执行人员提供了方便的工厂方法。内存一致性效果:操作在一个线程提交之前
Runnable
对象到Executor
happen-before其执行开始,也许在另一个线程。- 从以下版本开始:
- 1.5
-
-
方法详细信息
-
execute
void execute(Runnable command)
在将来的某个时间执行给定的命令。 该命令可以在一个新线程,一个合并的线程中或在调用线程中执行,由Executor
实现。- 参数
-
command
- 可运行的任务 - 异常
-
RejectedExecutionException
- 如果此任务不能被接受执行 -
NullPointerException
- 如果命令为空
-
-