Spec-Zone.ru › OpenJDK 27

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

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

Модификатор и тип Метод Описание
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
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения указанного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения указанного промежутка реального времени.

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

ExecutorCompletionService

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

ExecutorCompletionService

public ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
Создает ExecutorCompletionService, используя предоставленный исполнитель для выполнения базовых задач и предоставленную очередь в качестве очереди завершенных задач.
Параметры:
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, 2026, 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.

Spec-Zone.ru

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