-
- All Known Subinterfaces:
-
ExecutorService
,ScheduledExecutorService
public interface Executor
执行提交的Runnable
任务的对象。 此接口提供了一种将任务提交与每个任务的运行机制分离的方法,包括线程使用,调度等的详细信息。通常使用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
- 如果command为null
-
-