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 > 屏障動作 < /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(Int32, IRunnable) |
建立新的 |
CyclicBarrier(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 標記法時使用的建構函式;由執行時間呼叫。 |
屬性
Class |
傳回這個 |
Handle |
基礎 Android 實例的控制碼。 (繼承來源 Object) |
IsBroken |
查詢此屏障是否處於中斷狀態。 |
JniIdentityHashCode |
同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。 (繼承來源 Object) |
JniPeerMembers |
同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。 |
NumberWaiting |
傳回目前在屏障等候的合作物件數目。 |
Parties |
傳回前往此屏障所需的合作物件數目。 |
PeerReference |
同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。 (繼承來源 Object) |
ThresholdClass |
此 API 支援適用于 Android 的 Mono 基礎結構,並不適合直接從您的程式碼使用。 |
ThresholdType |
此 API 支援適用于 Android 的 Mono 基礎結構,並不適合直接從您的程式碼使用。 |
方法
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 < 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) |
同步處理協助工具,可讓一組執行緒全部等候彼此到達常見的屏障點。 |