Spec-Zone.ru › OpenJDK 25

Интерфейс 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 — если command равен null

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, включая общие сведения, определения терминов, способы обхода проблем и примеры рабочего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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