Интерфейс CompletionService<V>
- Все известные реализующие классы:
ExecutorCompletionService
public interface CompletionService<V>
Сервис, который разъединяет производство новых асинхронных задач от потребления результатов завершенных задач. Производители submit задачи для выполнения. Потребители take завершенные задачи и обрабатывают их результаты в порядке их завершения. Сервис CompletionService может, например, использоваться для управления асинхронным вводом-выводом, в котором задачи, выполняющие чтения, отправляются в одной части программы или системы, а затем обрабатываются в другой части программы при завершении чтений, возможно, в другом порядке, чем они были запрошены.
Как правило, сервис CompletionService полагается на отдельный Executor для фактического выполнения задач, в этом случае сервис CompletionService только управляет внутренней очередью завершения. Класс ExecutorCompletionService предоставляет реализацию этого подхода.
Эффекты согласованности памяти: Действия в потоке до отправки задачи в сервис CompletionService происходят раньше действий, выполняемых этой задачей, которые, в свою очередь, происходят раньше действий, следующих за успешным возвратом из соответствующего take().
- С момента:
- 1.5
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
Future<V> |
poll() |
Возвращает и удаляет Future, представляющую следующую завершенную задачу, или |
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, представляющую следующую завершенную задачу, ожидая, если таковых еще нет. |
Методы
submit
Future<V> submit(Callable<V> task)
Отправляет задачу, возвращающую значение, на выполнение и возвращает Future, представляющую ожидаемые результаты задачи. После завершения эта задача может быть взята или опрошена.
- Параметры:
-
task- отправляемая задача - Возвращает:
- Future, представляющая ожидаемое завершение задачи
- Исключения:
-
RejectedExecutionException- если задача не может быть запланирована для выполнения -
NullPointerException- если задача равна null
submit
Future<V> submit(Runnable task,
V result)
Отправляет задачу Runnable на выполнение и возвращает Future, представляющую эту задачу. После завершения эта задача может быть взята или опрошена.
- Параметры:
-
task- отправляемая задача -
result- результат, возвращаемый при успешном завершении - Возвращает:
- Future, представляющая ожидаемое завершение задачи, и метод
get()которой вернет заданное значение результата при завершении - Исключения:
-
RejectedExecutionException- если задача не может быть запланирована для выполнения -
NullPointerException- если задача равна null
take
Future<V> take()
throws InterruptedException
Возвращает и удаляет Future, представляющую следующую завершенную задачу, ожидая, если таковых еще нет.
- Возвращает:
- Future, представляющая следующую завершенную задачу
- Исключения:
-
InterruptedException- если произошла прерывание ожидания
poll
Future<V> poll()
Возвращает и удаляет Future, представляющую следующую завершенную задачу, или null если таковых нет.
- Возвращает:
- Future, представляющая следующую завершенную задачу, или
nullесли таковых нет
poll
Future<V> poll(long timeout,
TimeUnit unit)
throws InterruptedException
Возвращает и удаляет Future, представляющую следующую завершенную задачу, ожидая при необходимости до указанного времени ожидания, если таковых еще нет.
- Параметры:
-
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionService.html