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