Spec-Zone.ru › OpenJDK 17

Интерфейс 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 предоставляет удобные фабричные методы для этих Executor.

Влияние на согласованность памяти: Действия в потоке до передачи объекта Runnable объекту Executor предшествуют началу его выполнения, возможно, в другом потоке.

С:
1.5

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

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

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

execute

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

© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/Executor.html

Spec-Zone.ru

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