CyclicBarrier 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。
[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
- 继承
- 属性
注解
一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。 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.CyclicBarrier
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
构造函数
CyclicBarrier(Int32) |
创建一个新的 |
CyclicBarrier(Int32, IRunnable) |
创建一个新的 |
CyclicBarrier(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
IsBroken |
查询此屏障是否处于损坏状态。 |
JniIdentityHashCode |
一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。 (继承自 Object) |
JniPeerMembers |
一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。 |
NumberWaiting |
返回当前在屏障处等待的参与方数。 |
Parties |
返回跨越此屏障所需的参与方数。 |
PeerReference |
一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。 (继承自 Object) |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
方法
Await() |
等待,直到所有 #getParties 方都在此屏障上调用 |
Await(Int64, TimeUnit) |
等待,直到所有 #getParties 方在此屏障上调用 |
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) |
一种同步辅助,允许一组线程全部等待彼此到达公共屏障点。 |