Класс 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 |
Создает ExecutorCompletionService, используя предоставленный исполнитель для выполнения базовых задач и LinkedBlockingQueue в качестве очереди завершенных задач. |
ExecutorCompletionService |
Создает ExecutorCompletionService, используя предоставленный исполнитель для выполнения базовых задач и предоставленную очередь в качестве очереди завершенных задач. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Future |
poll() |
Получает и удаляет Future, представляющий следующую завершенную задачу, или null, если таких задач нет. |
Future |
poll |
Получает и удаляет Future, представляющий следующую завершенную задачу; если таких задач пока нет, ожидает их появления не дольше указанного времени. |
Future |
submit |
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу. |
Future |
submit |
Отправляет задачу, возвращающую значение, на выполнение и возвращает Future, представляющий ожидаемые результаты этой задачи. |
Future |
take() |
Получает и удаляет Future, представляющий следующую завершенную задачу; если таких задач пока нет, ожидает их появления. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения указанного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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- если ожидание было прервано
© 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.