public interface Executor
Runnable
任务。该界面提供了一种解耦任务提交从力学的每个任务将运行,包括线程的使用、调度等细节,
Executor
通常不是显式创建线程。例如,而不是调用
new Thread(new(RunnableTask())).start()
每一组的任务,您可以使用:
遗嘱执行人的遗嘱执行人= anexecutor;遗嘱执行人执行(新runnabletask1());遗嘱执行人执行(新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<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
此包中实现
ExecutorService
提供
Executor
实现,这是一个更广泛的接口。的
ThreadPoolExecutor
类提供了一个可扩展的线程池的实现。这些执行者的
Executors
类提供了方便的工厂方法。
内存一致性效果:在提交Runnable
对象到一个Executor
happen-before执行开始前一个线程的行为,也许在另一个线程。
void execute(Runnable command)
Executor
实施自由裁量权。
command
的Runnable任务
RejectedExecutionException
-如果这项任务不能执行
NullPointerException
如果命令是无效的
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.