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
- 繼承
- 屬性
備註
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 循環障礙在涉及固定大小執行緒隊伍的程式中非常有用,這些執行緒偶爾必須互相等待。 這種障壁稱為 <em>cyclic</em> ,因為在等待螺紋釋放後可以重複使用。
A 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 之前,執行緒中的動作發生於 i-><在 i-i>,這些動作屬於障礙動作,而這些動作又發生在其他執行緒中對應await()的成功回傳後,先於行動發生。
已在1.5中新增。
Java 文件 java.util.concurrent.CyclicBarrier。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| CyclicBarrier(Int32, IRunnable) |
建立一個新 |
| CyclicBarrier(Int32) |
建立一個新程序 |
| CyclicBarrier(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| IsBroken |
詢問這個屏障是否處於破損狀態。 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
| JniPeerMembers |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 |
| NumberWaiting |
返回目前在閘口等候的隊伍數量。 |
| Parties |
返回觸發此障礙所需的當事人數量。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
| 名稱 | Description |
|---|---|
| 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 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 (繼承來源 JavaObject) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |