Spec-Zone.ru › OpenJDK 24

Класс ExecutorCompletionService<V>

java.lang.Object
java.util.concurrent.ExecutorCompletionService<V>
Type Parameters:
V - тип значений, которые задачи этого сервиса производят и потребляют
All Implemented Interfaces:
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);
 }
Since:
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, представляющий следующую завершенную задачу, ожидая, если таковых еще нет.

Методы, унаследованные от класса java.lang.Object

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

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

ExecutorCompletionService

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

ExecutorCompletionService

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

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

submit

public Future<V> submit(Callable<V> task)
Описание скопировано из интерфейса: CompletionService
Отправляет возвращающую значение задачу на выполнение и возвращает Future, представляющую ожидаемые результаты задачи. По завершении, эта задача может быть взята или опрошена.
Specified by:
submit в интерфейсе CompletionService<V>
Parameters:
task - отправляемая задача
Returns:
Future, представляющая ожидаемое завершение задачи
Throws:
RejectedExecutionException - если задача не может быть запланирована на выполнение
NullPointerException - если задача равна null

submit

public Future<V> submit(Runnable task, V result)
Описание скопировано из интерфейса: CompletionService
Отправляет задачу Runnable на выполнение и возвращает Future, представляющую эту задачу. По завершении, эта задача может быть взята или опрошена.
Specified by:
submit в интерфейсе CompletionService<V>
Parameters:
task - отправляемая задача
result - результат, возвращаемый при успешном завершении
Returns:
Future, представляющая ожидаемое завершение задачи, и чье метод get() вернет заданное значение результата по завершении
Throws:
RejectedExecutionException - если задача не может быть запланирована на выполнение
NullPointerException - если задача равна null

take

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

poll

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

poll

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ExecutorCompletionService.html

Spec-Zone.ru

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