CountDownLatch Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках.
[Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)]
public class CountDownLatch : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)>]
type CountDownLatch = class
inherit Object
- Наследование
- Атрибуты
Комментарии
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках.
Инициализируется CountDownLatch с заданным <>числом< em/em>. Блок #await await методов до тех пор, пока текущее число не достигнет нуля из-за вызовов #countDown метода, после чего все потоки ожидания освобождаются и все последующие вызовы #await await возврата немедленно. Это однократное явление - число не может быть сброшено. Если вам нужна версия, которая сбрасывает количество, рассмотрите возможность использования CyclicBarrier.
Это CountDownLatch универсальное средство синхронизации и может использоваться в ряде целей. Инициализированная CountDownLatch с числом одного служит простой блокировкой или выключением, или шлюзом: все потоки, вызывающие #await await ожидание в шлюзе, пока он не будет открыт вызовом #countDownпотока. Инициализированную CountDownLatch для <>em N</em> можно использовать для выполнения одного потока ожидания до тех пор, пока <потоки em>N</em> завершили какое-либо действие, или некоторые действия были завершены n раз.
Полезное свойство объекта CountDownLatch заключается в том, что не требуется, чтобы потоки, вызывающие countDown число, ждали, чтобы число достигло нуля, прежде чем продолжить, он просто предотвращает продолжение любого потока до #await await тех пор, пока все потоки не смогут пройти.
<b Пример использования:></b>< Ниже приведена пара классов, в которых группа рабочих потоков использует две блоки с отсчетом: ul><li>Первый — это сигнал начала, который предотвращает продолжение работы любого рабочего процесса до тех пор, пока драйвер не будет готов к их продолжению; <li>Второй — это сигнал завершения, позволяющий водителю ждать до завершения всех рабочих процессов. </ul>
{@code
class Driver { // ...
void main() throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(N);
for (int i = 0; i < N; ++i) // create and start threads
new Thread(new Worker(startSignal, doneSignal)).start();
doSomethingElse(); // don't let run yet
startSignal.countDown(); // let all threads proceed
doSomethingElse();
doneSignal.await(); // wait for all to finish
}
}
class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await();
doWork();
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { ... }
}}
Другое типичное использование заключается в том, чтобы разделить проблему на N-части, описать каждую часть с runnable, которая выполняет эту часть и подсчитывает на блокировку, и очередь всех запускаемых объектов исполнителя. Когда все вложенные части завершены, координирующий поток сможет пройти через ожидание. (Если потоки должны многократно отсчитывать таким образом, вместо этого используйте CyclicBarrier.)
{@code
class Driver2 { // ...
void main() throws InterruptedException {
CountDownLatch doneSignal = new CountDownLatch(N);
Executor e = ...;
for (int i = 0; i < N; ++i) // create and start threads
e.execute(new WorkerRunnable(doneSignal, i));
doneSignal.await(); // wait for all to finish
}
}
class WorkerRunnable implements Runnable {
private final CountDownLatch doneSignal;
private final int i;
WorkerRunnable(CountDownLatch doneSignal, int i) {
this.doneSignal = doneSignal;
this.i = i;
}
public void run() {
doWork();
doneSignal.countDown();
}
void doWork() { ... }
}}
Эффекты согласованности памяти: до тех пор, пока число не достигнет нуля, действия в потоке перед вызовом countDown()<действий i>happen-before</i> после успешного возврата из соответствующего await() потока в другом потоке.
Добавлено в версии 1.5.
Java документации по java.util.concurrent.CountDownLatch.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| CountDownLatch(Int32) |
Создает инициализированную |
| CountDownLatch(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
| Имя. | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Count |
Возвращает текущее число. |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| JniPeerMembers |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя. | Описание |
|---|---|
| Await() |
Приводит к тому, что текущий поток будет ожидать, пока блокировка не будет отсчитываться до нуля, если поток не прерывается. |
| Await(Int64, TimeUnit) |
Вызывает ожидание текущего потока до нуля, если поток не прерывается, или указанное время ожидания истекает. |
| AwaitAsync() |
Асинхронно ожидает, пока число блокировок достигнет нуля. |
| AwaitAsync(Int64, TimeUnit) |
Асинхронно ожидает, пока число блокировок достигнет нуля или указанного времени ожидания истекает. |
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| CountDown() |
Уменьшает количество блокировок, освобождая все потоки ожидания, если число достигает нуля. |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| Equals(Object) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| IJavaPeerable.Finalized() |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. (Унаследовано от JavaObject) |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Помощь синхронизации, которая позволяет одному или нескольким потокам ожидать завершения набора операций в других потоках. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |