Spec-Zone.ru › OpenJDK 21

Класс 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, представляющую следующую завершенную задачу, ожидая, если таких еще нет.

Методы, объявленные в классе java.lang.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, представляющую ожидаемые результаты задачи. После завершения, эта задача может быть взята или обработана.
Задано:
submit в интерфейсе CompletionService<V>
Параметры:
task - отправляемая задача
Возвращает:
Future, представляющая ожидаемое завершение задачи
Исключения:
RejectedExecutionException - если задача не может быть запланирована на выполнение
NullPointerException - если задача null

submit

public Future<V> submit(Runnable task, V result)
Описание, скопированное из интерфейса: CompletionService
Отправляет задачу Runnable на выполнение и возвращает Future, представляющую эту задачу. После завершения, эта задача может быть взята или обработана.
Задано:
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 - если прервано во время ожидания

© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/ExecutorCompletionService.html

Spec-Zone.ru

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