Spec-Zone.ru › OpenJDK 21

Интерфейс 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<>();
   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 происходят раньше начала его выполнения, возможно, в другом потоке.

С момента:
1.5

Краткое описание методов

Модификатор и тип Метод Описание
void execute(Runnable command)
Выполняет заданный командный блок в какой-то момент в будущем.

Подробное описание методов

execute

void execute(Runnable command)
Выполняет заданный командный блок в какой-то момент в будущем. Командный блок может быть выполнен в новом потоке, в пуле потоков или в вызывающем потоке, по усмотрению реализации Executor.
Параметры:
command - выполняемая задача
Исключения:
RejectedExecutionException - если эта задача не может быть принята для выполнения
NullPointerException - если команда равна null

© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/Executor.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API