語言

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
屬性

備註

一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。 循環障礙在涉及固定大小執行緒隊伍的程式中非常有用,這些執行緒偶爾必須互相等待。 這種障壁稱為 <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 程序,當等待的當事方數量(執行緒)時觸發,當障礙觸發時執行該障礙動作,由最後一個進入障礙的執行緒執行。

CyclicBarrier(Int32)

建立一個新程序 CyclicBarrier ,當指定數量的當事方(執行緒)等待時會觸發,且當障礙被觸發時不會執行預設動作。

CyclicBarrier(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
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 這項障礙。

Await(Int64, TimeUnit)

等待所有 #getParties 方都啟動 await 此障礙,或規定的等待時間結束。

AwaitAsync()

非同步等待所有相關方都啟動 await 此障礙。

AwaitAsync(Int64, TimeUnit)

非同步等待所有相關方都啟動 await 此障礙。

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)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一種同步輔助工具,允許一組執行緒彼此等待,直到達到共同的障礙點。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於