|
Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ExecutorCompletionService<V> extends Object implements CompletionService<V>
CompletionService это использует предоставленный Executor выполнить задачи. Этот class расположения, которые представили задачи, после завершения, помещенного в очередь доступное использование take. class достаточно легок, чтобы быть подходящим для переходного использования, обрабатывая группы задач.
Примеры использования. Предположите, что у Вас есть ряд solvers для определенной проблемы, каждый, возвращая значение некоторого типа Result, и хотел бы выполнить их одновременно, обрабатывая результаты каждого из них, которые возвращают ненулевое значение в некотором методе 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);
}
} Предположите вместо этого, что требуется использовать первый ненулевой результат набора задач, игнорируя любого, которые встречаются с исключениями, и отменяющий все другие задачи, когда первый готов:
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, используя предоставленного исполнителя для основного выполнения задачи и a
LinkedBlockingQueue как очередь завершения. |
ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
Создает ExecutorCompletionService, используя предоставленного исполнителя для основного выполнения задачи и предоставленную очередь как ее очередь завершения.
|
| Модификатор и Тип | Метод и Описание |
|---|---|
Future<V> |
poll()
Получает и удаляет Будущее, представляющее следующую завершенную задачу или null, если ни один не присутствует.
|
Future<V> |
poll(long timeout, TimeUnit unit)
Получает и удаляет Будущее, представляющее следующую завершенную задачу, ожидая в случае необходимости до указанного времени ожидания, если ни один еще не присутствует.
|
Future<V> |
submit(Callable<V> task)
Представляет возвращающую значение задачу для выполнения и возвращает Будущее, представляющее результаты на ожидании задачи.
|
Future<V> |
submit(Runnable task, V result)
Представляет Выполнимую задачу для выполнения и возвращает Будущее, представляющее ту задачу.
|
Future<V> |
take()
Получает и удаляет Будущее, представляющее следующую завершенную задачу, ожидая, если ни один еще не присутствует.
|
public ExecutorCompletionService(Executor executor)
LinkedBlockingQueue как очередь завершения.executor - исполнитель, чтобы использоватьNullPointerException - если исполнитель nullpublic ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
executor - исполнитель, чтобы использоватьcompletionQueue - очередь, чтобы обычно использовать в качестве очереди завершения один выделенный для использования этой службой. Эта очередь обрабатывается как неограниченная - отказавший предпринятый Queue.add операции для завершенного taskes заставляют их не быть восстановимыми.NullPointerException - если исполнитель или completionQueue nullpublic Future<V> submit(Callable<V> task)
CompletionServicesubmit в интерфейсе CompletionService<V>task - задача подчинитьсяpublic Future<V> submit(Runnable task, V result)
CompletionServicesubmit в интерфейсе CompletionService<V>task - задача подчинитьсяresult - результат возвратиться после успешного завершенияpublic Future<V> take() throws InterruptedException
CompletionServicetake в интерфейсе CompletionService<V>InterruptedException - если прервано, ожидаяpublic Future<V> poll()
CompletionServicepoll в интерфейсе CompletionService<V>public Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException
CompletionServicepoll в интерфейсе CompletionService<V>timeout - сколько времени ожидать перед отказом в модулях unitunit - TimeUnit, определяющий, как интерпретировать параметр timeoutInterruptedException - если прервано, ожидая
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92