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
继承
CyclicBarrier
属性

注解

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。 CyclicBarriers 在涉及固定大小的线程群的程序中非常有用,这些线程偶尔必须相互等待。 屏障称为 <em>cyclic</em> ,因为它可以在释放等待的线程后重新使用。

CyclicBarrier支持一个可选Runnable命令,该命令在每个屏障点运行一次,在群中的最后一个线程到达之后,但在释放任何线程之前。 此 <em>barrier action</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.util.concurrent.CyclicBarrierJava 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

构造函数

CyclicBarrier(Int32)

创建一个新的 CyclicBarrier ,当给定数量的线程 (线程) 等待它时,它将跳动,并在绊倒屏障时不执行预定义的操作。

CyclicBarrier(Int32, IRunnable)

创建一个新的 CyclicBarrier ,当给定数量的线程 (线程) 等待它时,它将执行给定的屏障操作,该操作将在绊倒屏障时执行,由进入屏障的最后一个线程执行。

CyclicBarrier(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
IsBroken

查询此屏障是否处于损坏状态。

JniIdentityHashCode

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
JniPeerMembers

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

NumberWaiting

返回当前在屏障处等待的参与方数。

Parties

返回跨越此屏障所需的参与方数。

PeerReference

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。

方法

Await()

等待,直到所有 #getParties 方都在此屏障上调用 await

Await(Int64, TimeUnit)

等待,直到所有 #getParties 方在此屏障上调用 await ,或指定的等待时间已过。

AwaitAsync()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

AwaitAsync(Int64, TimeUnit)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

Clone()

创建并返回此对象的副本。

(继承自 Object)
Dispose()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
Dispose(Boolean)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
Equals(Object)

指示某个其他对象是否“等于”此对象。

(继承自 Object)
GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

当垃圾回收确定不再引用对象时,由垃圾回收器对对象调用。

(继承自 Object)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
Reset()

将屏障重置为其初始状态。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
ToArray<T>()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
Wait()

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>

(继承自 Object)
Wait(Int64)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)

显式接口实现

IJavaPeerable.Disposed()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
IJavaPeerable.Finalized()

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

GetJniTypeName(IJavaPeerable)

一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。

适用于