ExecutorCompletionService Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Объект, CompletionService
который использует предоставленный Executor
для выполнения задач.
[Android.Runtime.Register("java/util/concurrent/ExecutorCompletionService", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "V" })]
public class ExecutorCompletionService : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Util.Concurrent.ICompletionService
[<Android.Runtime.Register("java/util/concurrent/ExecutorCompletionService", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "V" })>]
type ExecutorCompletionService = class
inherit Object
interface ICompletionService
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Наследование
- Атрибуты
- Реализации
Комментарии
Объект, CompletionService
который использует предоставленный Executor
для выполнения задач. Этот класс упорядочивает отправленные задачи после завершения, помещается в очередь, доступную с помощью take
. Класс достаточно упрощенный, чтобы быть подходящим для временного использования при обработке групп задач.
<Примеры использования.></b>
Предположим, что у вас есть набор решателей для определенной проблемы, каждый возвращающий значение определенного типа Result
, и хотел бы одновременно выполнять их, обрабатывая результаты каждого из них, возвращающего значение, отличное от NULL, в некоторых методах use(Result r)
. Вы можете написать следующее:
{@code
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);
}
}}
Предположим, что вы хотите использовать первый ненулевой результат набора задач, игнорируя все исключения и отменяя все остальные задачи, когда первый будет готов:
{@code
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.
Документация по Java для java.util.concurrent.ExecutorCompletionService
.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Конструкторы
ExecutorCompletionService(IExecutor) |
Создает службу ExecutionorCompletionService с помощью предоставленного исполнителя для выполнения базовой задачи и |
ExecutorCompletionService(IExecutor, IBlockingQueue) |
Создает службу ExecutionorCompletionService с помощью предоставленного исполнителя для выполнения базовой задачи и указанной очереди в качестве очереди завершения. |
ExecutorCompletionService(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
Class |
Возвращает класс среды выполнения этого |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
JniIdentityHashCode |
Объект, |
JniPeerMembers |
Объект, |
PeerReference |
Объект, |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
Объект, |
Dispose(Boolean) |
Объект, |
Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
JavaFinalize() |
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
Notify() |
Пробуждение одного потока, ожидающего монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
Poll() |
Извлекает и удаляет будущее, представляющее следующую завершенную задачу или |
Poll(Int64, TimeUnit) |
Извлекает и удаляет будущее, представляющее следующую завершенную задачу, ожидая до указанного времени ожидания, если нет. |
PollAsync() |
Объект, |
PollAsync(Int64, TimeUnit) |
Объект, |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
Submit(ICallable) |
Объект, |
Submit(IRunnable, Object) |
Объект, |
Take() |
Извлекает и удаляет будущее, представляющее следующую завершенную задачу, ожидая, пока нет. |
TakeAsync() |
Объект, |
ToArray<T>() |
Объект, |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
Объект, |
Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>. (Унаследовано от Object) |
Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
Объект, |
IJavaPeerable.DisposeUnlessReferenced() |
Объект, |
IJavaPeerable.Finalized() |
Объект, |
IJavaPeerable.JniManagedPeerState |
Объект, |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Объект, |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Объект, |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Объект, |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Объект, |
GetJniTypeName(IJavaPeerable) |
Объект, |