Share via


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 > 屏障動作 < /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 > 動作之前線程中的動作,接著會遵循從其他執行緒中對應 await() 傳回成功傳回的動作。

在 1.5 中新增。

java.util.concurrent.CyclicBarrier JAVA 檔。

此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。

建構函式

CyclicBarrier(Int32)

建立新的 CyclicBarrier ,當指定的合作物件數目 (執行緒) 等候時,不會在嘗試屏障時執行預先定義的動作。

CyclicBarrier(Int32, IRunnable)

建立新的 CyclicBarrier ,當指定的合作物件數目 (執行緒) 等候時,該物件會在進入屏障的最後一個執行緒執行時執行指定的屏障動作。

CyclicBarrier(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 標記法時使用的建構函式;由執行時間呼叫。

屬性

Class

傳回這個 Object 的執行時間類別。

(繼承來源 Object)
Handle

基礎 Android 實例的控制碼。

(繼承來源 Object)
IsBroken

查詢此屏障是否處於中斷狀態。

JniIdentityHashCode

同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。

(繼承來源 Object)
JniPeerMembers

同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。

NumberWaiting

傳回目前在屏障等候的合作物件數目。

Parties

傳回前往此屏障所需的合作物件數目。

PeerReference

同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。

(繼承來源 Object)
ThresholdClass

此 API 支援適用于 Android 的 Mono 基礎結構,並不適合直接從您的程式碼使用。

ThresholdType

此 API 支援適用于 Android 的 Mono 基礎結構,並不適合直接從您的程式碼使用。

方法

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 < notified/em > 或 < em > interrupted < /em > 。 ><

(繼承來源 Object)
Wait(Int64)

讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <>

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的執行緒等到喚醒為止,通常是 em < notified/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)

同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。

適用於