Spec-Zone.ru › OpenJDK 17

Класс ExecutorCompletionService<V>

java.lang.Object
java.util.concurrent.ExecutorCompletionService<V>
Все реализованные интерфейсы:
CompletionService<V>
public class ExecutorCompletionService<V> extends Object implements CompletionService<V>
A CompletionService that uses a supplied Executor to execute tasks. This class arranges that submitted tasks are, upon completion, placed on a queue accessible using take. The class is lightweight enough to be suitable for transient use when processing groups of tasks.

Примеры использования. Предположим, у вас есть набор решателей для определенной задачи, каждый из которых возвращает значение некоторого типа 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 в качестве очереди завершения.
Параметры:
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 параметра
Возвращает:
Future, представляющий следующую завершенную задачу, или null , если указанное время ожидания истекло, прежде чем такая задача появилась
Исключения:
InterruptedException - если прервано ожидание

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

Spec-Zone.ru

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