Интерфейс 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 не строго требует асинхронного выполнения. В самом простом случае Executor может немедленно выполнить переданную задачу в потоке вызывающего объекта:
class DirectExecutor implements Executor {
public void execute(Runnable r) {
r.run();
}
} Чаще всего задачи выполняются в другом потоке, отличном от потока вызывающего объекта. Executor ниже порождает новый поток для каждой задачи.
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
} Многие реализации Executor накладывают ограничения на способ и время планирования задач. Executor ниже сериализует передачу задач во второй Executor, иллюстрируя составной 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 предоставляет удобные фабричные методы для этих Executors. Эффекты согласованности памяти: Действия в потоке перед отправкой объекта Runnable в Executor предшествуют его началу выполнения, возможно, в другом потоке.
- Since:
- 1.5
Краткое описание методов
Подробное описание методов
execute
void execute(Runnable command)
Выполняет данную команду в будущем. Команда может быть выполнена в новом потоке, в пуле потоков или в вызывающем потоке, по усмотрению реализации
Executor.- Параметры:
-
command- выполняемая задача - Исключения:
-
RejectedExecutionException- если эта задача не может быть принята для выполнения -
NullPointerException- если команда равна null
© 1993, 2025, 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/Executor.html