CyclicBarrier Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.
[Android.Runtime.Register("java/util/concurrent/CyclicBarrier", DoNotGenerateAcw=true)]
public class CyclicBarrier : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CyclicBarrier", DoNotGenerateAcw=true)>]
type CyclicBarrier = class
inherit Object
- Наследование
- Атрибуты
Комментарии
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. Циклическиеbarriers полезны в программах с участием партии фиксированного размера потоков, которые иногда должны ждать друг друга. Барьер называется <эм>циклическим</em> , так как его можно повторно использовать после освобождения потоков ожидания.
Поддерживает CyclicBarrier необязательную Runnable команду, которая выполняется один раз на одну точку барьера после прибытия последнего потока в стороне, но до освобождения всех потоков. Это <действие> em<барьера или em> полезно для обновления общего состояния перед тем, как любая из сторон продолжится.
<B>Пример использования:</b> Ниже приведен пример использования барьера в параллельном декомпозиции:
{@code
class Solver {
final int N;
final float[][] data;
final CyclicBarrier barrier;
class Worker implements Runnable {
int myRow;
Worker(int row) { myRow = row; }
public void run() {
while (!done()) {
processRow(myRow);
try {
barrier.await();
} catch (InterruptedException ex) {
return;
} catch (BrokenBarrierException ex) {
return;
}
}
}
}
public Solver(float[][] matrix) {
data = matrix;
N = matrix.length;
Runnable barrierAction = () -> mergeRows(...);
barrier = new CyclicBarrier(N, barrierAction);
List<Thread> threads = new ArrayList<>(N);
for (int i = 0; i < N; i++) {
Thread thread = new Thread(new Worker(i));
threads.add(thread);
thread.start();
}
// wait until done
for (Thread thread : threads)
try {
thread.join();
} catch (InterruptedException ex) { }
}
}}
Здесь каждый рабочий поток обрабатывает строку матрицы, а затем ожидает на барьере до тех пор, пока все строки не будут обработаны. Когда все строки обрабатываются предоставленным Runnable действием барьера, выполняется и объединяет строки. Если слияние определяет, что найдено решение, done() возвращается true , и каждый работник завершит работу.
Если действие барьера не зависит от сторон, приостановленных при его выполнении, то при освобождении любой из потоков в стороне может выполнить это действие. Чтобы упростить эту задачу, каждый вызов #await возвращает индекс прибытия этого потока на барьере. Затем можно выбрать, какой поток должен выполнить действие барьера, например:
{@code
if (barrier.await() == 0) {
// log the completion of this iteration
}}
Использует CyclicBarrier модель прерывания всех или нет для неудачных попыток синхронизации: если поток покидает точку барьера преждевременно из-за прерывания, сбоя или ожидания, все остальные потоки, ожидающие в этой точке барьера, также останутся ненормально через BrokenBarrierException (или InterruptedException если они слишком были прерваны примерно в то же время).
Эффекты согласованности памяти: действия в потоке перед вызовом await()<действий i happen-before>/i<>, которые являются частью действия барьера, которые, в свою очередь, происходят перед действиями после успешного возврата из соответствующих await() в других потоках.
Добавлено в версии 1.5.
Документация по Java для java.util.concurrent.CyclicBarrier.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Конструкторы
| Имя. | Описание |
|---|---|
| CyclicBarrier(Int32, IRunnable) |
Создает новый |
| CyclicBarrier(Int32) |
Создает новый |
| CyclicBarrier(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
| Имя. | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| IsBroken |
Запросы, если этот барьер находится в неисправном состоянии. |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от JavaObject) |
| JniPeerMembers |
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. |
| NumberWaiting |
Возвращает количество сторон, ожидающих в настоящее время на барьере. |
| Parties |
Возвращает количество сторон, необходимых для поездки этого барьера. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя. | Описание |
|---|---|
| Await() |
Ожидает, пока все #getParties стороны не вызвали |
| Await(Int64, TimeUnit) |
Ожидает, пока все #getParties стороны не вызвали |
| AwaitAsync() |
Асинхронно ожидает, пока все стороны не вызвали |
| AwaitAsync(Int64, TimeUnit) |
Асинхронно ожидает, пока все стороны не вызвали |
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от JavaObject) |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от JavaObject) |
| Equals(Object) |
Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от JavaObject) |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Notify() |
Пробуждение одного потока, ожидающего монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| Reset() |
Сбрасывает барьер до начального состояния. |
| 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) |
Попробуйте принуждать к типу |