Spec-Zone.ru › OpenJDK 8

Класс 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, и вы хотите запустить их одновременно, обрабатывая результаты каждого из них, возвращающих не null-значение, в некотором методе use(Result r). Вы можете записать это так:

void solve(Executor e,
            Collection<Callable<Result>> solvers)
     throws InterruptedException, ExecutionException {
     CompletionService<Result> ecs
         = new ExecutorCompletionService<Result>(e);
     for (Callable<Result> s : solvers)
         ecs.submit(s);
     int n = solvers.size();
     for (int i = 0; i < n; ++i) {
         Result r = ecs.take().get();
         if (r != null)
             use(r);
     }
 }

Предположим, что вместо этого вы хотите использовать первый не null-результат набора задач, игнорируя те, которые сталкиваются с исключениями, и отменяя все другие задачи, когда первая задача готова:

void solve(Executor e,
            Collection<Callable<Result>> solvers)
     throws InterruptedException {
     CompletionService<Result> ecs
         = new ExecutorCompletionService<Result>(e);
     int n = solvers.size();
     List<Future<Result>> futures
         = new ArrayList<Future<Result>>(n);
     Result result = null;
     try {
         for (Callable<Result> s : solvers)
             futures.add(ecs.submit(s));
         for (int i = 0; i < n; ++i) {
             try {
                 Result r = ecs.take().get();
                 if (r != null) {
                     result = r;
                     break;
                 }
             } catch (ExecutionException ignore) {}
         }
     }
     finally {
         for (Future<Result> f : futures)
             f.cancel(true);
     }

     if (result != null)
         use(result);
 }

Конструкторы

Конструктор и описание
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(Callable<V> task)

Отправляет задачу возвращающую значение для выполнения и возвращает Future, представляющее ожидающие результаты задачи.

Future<V> submit(Runnable task, V result)

Отправляет задачу Runnable для выполнения и возвращает 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, представляющее ожидаемое завершение задачи

submit

public Future<V> submit(Runnable task,
                        V result)

Описание скопировано из интерфейса: CompletionService

Отправляет задачу Runnable для выполнения и возвращает Future, представляющую эту задачу. После завершения, эта задача может быть взята или обработана.

Определено в:
submit в интерфейсе CompletionService<V>
Параметры:
task - задача для отправки
result - результат, возвращаемый при успешном завершении
Возвращает:
Future, представляющее ожидаемое завершение задачи, и метод get() которого вернёт данное значение результата при завершении

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, 2020, 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