Spec-Zone.ru › OpenJDK 25

Класс ExecutorCompletionService<V>

java.lang.Object
java.util.concurrent.ExecutorCompletionService<V>
Параметры типа:
V — тип значений, которые задачи этой службы производят и обрабатывают
Все реализуемые интерфейсы:
CompletionService<V>
public class ExecutorCompletionService<V> extends Object implements CompletionService<V>
CompletionService, использующий предоставленный Executor для выполнения задач. Этот класс помещает отправленные задачи в очередь после их завершения; доступ к очереди осуществляется с помощью take. Класс достаточно лёгкий, чтобы его можно было использовать временно при обработке групп задач.

Примеры использования. Предположим, у вас есть набор решателей для определённой задачи, каждый из которых возвращает значение некоторого типа Result, и вы хотите запустить их параллельно, обрабатывая результаты тех из них, которые возвращают ненулевое значение, в некотором методе use(Result r). Это можно записать так:

void solve(Executor e,
           Collection<Callable<Result>> solvers)
    throws InterruptedException, ExecutionException {
  CompletionService<Result> cs
      = new ExecutorCompletionService<>(e);
  solvers.forEach(cs::submit);
  for (int i = solvers.size(); i > 0; i--) {
    Result r = cs.take().get();
    if (r != null)
      use(r);
  }
}
Предположим, вместо этого вы хотите использовать первый ненулевой результат набора задач, игнорируя те, которые завершились с исключениями, и отменяя все остальные задачи, как только будет получен первый результат:
void solve(Executor e,
           Collection<Callable<Result>> solvers)
    throws InterruptedException {
  CompletionService<Result> cs
      = new ExecutorCompletionService<>(e);
  int n = solvers.size();
  List<Future<Result>> futures = new ArrayList<>(n);
  Result result = null;
  try {
    solvers.forEach(solver -> futures.add(cs.submit(solver)));
    for (int i = n; i > 0; i--) {
      try {
        Result r = cs.take().get();
        if (r != null) {
          result = r;
          break;
        }
      } catch (ExecutionException ignore) {}
    }
  } finally {
    futures.forEach(future -> future.cancel(true));
  }

  if (result != null)
    use(result);
}
С момента выпуска:
1.5

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

Конструктор Описание
ExecutorCompletionService(Executor executor)
Создаёт ExecutorCompletionService, использующий предоставленный executor для выполнения базовых задач и LinkedBlockingQueue в качестве очереди завершённых задач.
ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
Создаёт ExecutorCompletionService, использующий предоставленный executor для выполнения базовых задач и предоставленную очередь в качестве очереди завершённых задач.

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

Модификатор и тип Метод Описание
Future<V> poll()
Извлекает и удаляет Future, представляющий следующую завершённую задачу, или null, если таких задач нет.
Future<V> poll(long timeout, TimeUnit unit)
Извлекает и удаляет Future, представляющий следующую завершённую задачу, ожидая при необходимости указанное время, если завершённых задач пока нет.
Future<V> submit(Runnable task, V result)
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу.
Future<V> submit(Callable<V> task)
Отправляет на выполнение задачу, возвращающую значение, и возвращает Future, представляющий ожидающий результат задачи.
Future<V> take()
Извлекает и удаляет Future, представляющий следующую завершённую задачу, ожидая, если завершённых задач пока нет.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

ExecutorCompletionService

public ExecutorCompletionService(Executor executor)
Создаёт ExecutorCompletionService, использующий предоставленный executor для выполнения базовых задач и LinkedBlockingQueue в качестве очереди завершённых задач.
Параметры:
executor — используемый executor
Исключения:
NullPointerException — если executor равен null

ExecutorCompletionService

public ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
Создаёт ExecutorCompletionService, использующий предоставленный executor для выполнения базовых задач и предоставленную очередь в качестве очереди завершённых задач.
Параметры:
executor — используемый executor
completionQueue — очередь, используемая в качестве очереди завершённых задач; обычно она предназначена специально для этой службы. Эта очередь считается неограниченной: если попытка выполнить операцию Queue.add для завершённой задачи завершается неудачей, такую задачу нельзя будет извлечь.
Исключения:
NullPointerException — если executor или completionQueue равны null

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

submit

public Future<V> submit(Callable<V> task)
Описание скопировано из интерфейса: CompletionService
Отправляет на выполнение задачу, возвращающую значение, и возвращает Future, представляющий ожидающий результат задачи. После завершения задачу можно получить с помощью take или poll.
Определено в:
submit в интерфейсе CompletionService<V>
Параметры:
task — отправляемая задача
Возвращает:
Future, представляющий ожидающее завершение задачи
Исключения:
RejectedExecutionException — если задачу невозможно запланировать для выполнения
NullPointerException — если задача равна null

submit

public Future<V> submit(Runnable task, V result)
Описание скопировано из интерфейса: CompletionService
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу. После завершения задачу можно получить с помощью take или poll.
Определено в:
submit в интерфейсе CompletionService<V>
Параметры:
task — отправляемая задача
result — результат, возвращаемый при успешном завершении
Возвращает:
Future, представляющий ожидающее завершение задачи; его метод get() после завершения вернёт указанное значение результата
Исключения:
RejectedExecutionException — если задачу невозможно запланировать для выполнения
NullPointerException — если задача равна null

take

public Future<V> take() throws InterruptedException
Описание скопировано из интерфейса: CompletionService
Извлекает и удаляет Future, представляющий следующую завершённую задачу, ожидая, если завершённых задач пока нет.
Определено в:
take в интерфейсе CompletionService<V>
Возвращает:
Future, представляющий следующую завершённую задачу
Исключения:
InterruptedException — если ожидание было прервано

poll

public Future<V> poll()
Описание скопировано из интерфейса: CompletionService
Извлекает и удаляет Future, представляющий следующую завершённую задачу, или null, если таких задач нет.
Определено в:
poll в интерфейсе CompletionService<V>
Возвращает:
Future, представляющий следующую завершённую задачу, или null, если таких задач нет

poll

public Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException
Описание скопировано из интерфейса: CompletionService
Извлекает и удаляет Future, представляющий следующую завершённую задачу, ожидая при необходимости указанное время, если завершённых задач пока нет.
Определено в:
poll в интерфейсе CompletionService<V>
Параметры:
timeout — сколько ждать до прекращения ожидания, в единицах unit
unit — TimeUnit, определяющий интерпретацию параметра timeout
Возвращает:
Future, представляющий следующую завершённую задачу, или null, если указанное время ожидания истекло до появления такой задачи
Исключения:
InterruptedException — если ожидание было прервано

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/ExecutorCompletionService.html

Spec-Zone.ru

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