Интерфейс Executor
- Все известные подинтерфейсы:
- ExecutorService, ScheduledExecutorService
- Все известные реализующие классы:
- AbstractExecutorService, ForkJoinPool, ScheduledThreadPoolExecutor, ThreadPoolExecutor
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<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);
}
}
} Executor реализации, представленные в этом пакете, реализуют ExecutorService, что является более обширным интерфейсом. Класс ThreadPoolExecutor предоставляет расширяемую реализацию пула потоков. Класс Executors предоставляет удобные фабричные методы для этих исполнителей.
Эффекты согласованности памяти: Действия в потоке до отправки объекта Runnable в Executor происходят до начала его выполнения, возможно, в другом потоке.
- С:
- 1.5
Методы
| Модификатор и Тип | Метод и Описание |
|---|---|
void |
execute(Runnable command) Выполняет данную команду в некотором будущем. |
Методы
execute
void execute(Runnable command)
Выполняет данную команду в некотором будущем. Команда может быть выполнена в новом потоке, в пуле потоков или в потоке вызова, по усмотрению реализации Executor.
- Параметры:
-
command- выполняемая задача - Исключение:
-
RejectedExecutionException- если эта задача не может быть принята для выполнения -
NullPointerException- если команда равна null
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.