CyclicBarrier Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum.
[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
- Warisan
- Atribut
Keterangan
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. CyclicBarriers berguna dalam program yang melibatkan pihak berukuran tetap dari utas yang kadang-kadang harus saling menunggu. Penghambat disebut <em>cyclic</em> karena dapat digunakan kembali setelah utas tunggu dirilis.
CyclicBarrier Mendukung perintah opsional Runnable yang dijalankan sekali per titik pembatas, setelah utas terakhir dalam pesta tiba, tetapi sebelum utas dirilis.
<Tindakan>/em< hambatan ini >berguna untuk memperbarui status bersama sebelum salah satu pihak berlanjut.
<b>Penggunaan sampel:</b> Berikut adalah contoh penggunaan penghapus dalam desain dekomposisi paralel:
{@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) { }
}
}}
Di sini, setiap utas pekerja memproses baris matriks, lalu menunggu di pembatas hingga semua baris telah diproses. Ketika semua baris diproses, tindakan pembatas yang disediakan Runnable dijalankan dan menggabungkan baris. Jika merger menentukan bahwa solusi telah ditemukan, maka done() akan kembali true dan setiap pekerja akan berakhir.
Jika tindakan pembatas tidak mengandalkan pihak-pihak yang ditangguhkan ketika dijalankan, maka salah satu utas dalam pihak dapat menjalankan tindakan itu ketika dirilis. Untuk memfasilitasi hal ini, setiap pemanggilan #await mengembalikan indeks kedatangan utas tersebut pada pembatas. Anda kemudian dapat memilih utas mana yang harus menjalankan tindakan pembatas, misalnya:
{@code
if (barrier.await() == 0) {
// log the completion of this iteration
}}
menggunakan CyclicBarrier model pemecahan semua atau tidak ada untuk upaya sinkronisasi yang gagal: Jika utas meninggalkan titik pembatas sebelum waktunya karena gangguan, kegagalan, atau waktu habis, semua utas lain yang menunggu di titik pembatas tersebut juga akan keluar secara tidak normal melalui BrokenBarrierException (atau InterruptedException jika mereka juga terganggu pada waktu yang sama).
Efek konsistensi memori: Tindakan dalam utas sebelum memanggil await()<tindakan i>happen-before</i> yang merupakan bagian dari tindakan penghambat, yang pada gilirannya terjadi-sebelum tindakan setelah pengembalian yang berhasil dari yang sesuai await() di utas lain.
Ditambahkan dalam 1.5.
Java dokumentasi untuk java.util.concurrent.CyclicBarrier.
Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.
Konstruktor
| Nama | Deskripsi |
|---|---|
| CyclicBarrier(Int32, IRunnable) |
Membuat baru |
| CyclicBarrier(Int32) |
Membuat baru |
| CyclicBarrier(IntPtr, JniHandleOwnership) |
Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime. |
Properti
| Nama | Deskripsi |
|---|---|
| Class |
Mengembalikan kelas runtime dari . |
| Handle |
Handel ke instans Android yang mendasar. (Diperoleh dari Object) |
| IsBroken |
Kueri jika hambatan ini dalam keadaan rusak. |
| JniIdentityHashCode |
Mendapatkan kode hash identitas yang ditetapkan ke Java peer ini oleh runtime interop. (Diperoleh dari Object) |
| JniManagedPeerState |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| JniPeerMembers |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. |
| NumberWaiting |
Mengembalikan jumlah pihak yang saat ini menunggu di pembatas. |
| Parties |
Mengembalikan jumlah pihak yang diperlukan untuk melakukan perjalanan hambatan ini. |
| PeerReference |
Mendapatkan referensi objek JNI untuk peer Java ini. (Diperoleh dari Object) |
| ThresholdClass |
API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. |
| ThresholdType |
API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. |
Metode
| Nama | Deskripsi |
|---|---|
| Await() |
Tunggu sampai semua pihak #getParties memanggil penghubung |
| Await(Int64, TimeUnit) |
Tunggu hingga semua pihak #getParties memanggil |
| AwaitAsync() |
Secara asinkron menunggu sampai semua pihak memanggil |
| AwaitAsync(Int64, TimeUnit) |
Secara asinkron menunggu sampai semua pihak memanggil |
| Clone() |
Membuat dan mengembalikan salinan objek ini. (Diperoleh dari Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| Dispose() |
Merilis sumber daya yang dipegang oleh rekan Java ini. (Diperoleh dari Object) |
| Dispose(Boolean) |
Merilis sumber daya yang dipegang oleh rekan Java ini. (Diperoleh dari Object) |
| DisposeUnlessReferenced() |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| Equals(Object) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| Equals(Object) |
Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini. (Diperoleh dari Object) |
| GetHashCode() |
Mengembalikan nilai kode hash untuk objek . (Diperoleh dari Object) |
| JavaFinalize() |
Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek. (Diperoleh dari Object) |
| Notify() |
Membangunkan satu utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| NotifyAll() |
Membangunkan semua utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| Reset() |
Mereset penghubung ke status awalnya. |
| SetHandle(IntPtr, JniHandleOwnership) |
Mengatur properti Handle. (Diperoleh dari Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| ToArray<T>() |
Membuat array terkelola dari pembungkus array Java ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan representasi string objek. (Diperoleh dari Object) |
| UnregisterFromRuntime() |
Membatalkan pendaftaran peer Java ini dari runtime interop. (Diperoleh dari Object) |
| Wait() |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <diberitahu></em> atau <em>terganggu</em>. (Diperoleh dari Object) |
| Wait(Int64, Int32) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah real time telah berlalu. (Diperoleh dari Object) |
| Wait(Int64) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah real time telah berlalu. (Diperoleh dari Object) |
Implementasi Antarmuka Eksplisit
| Nama | Deskripsi |
|---|---|
| IJavaPeerable.Disposed() |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| IJavaPeerable.Finalized() |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. (Diperoleh dari JavaObject) |
Metode Ekstensi
| Nama | Deskripsi |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Mendapatkan nama JNI dari jenis instans |
| JavaAs<TResult>(IJavaPeerable) |
Cobalah untuk memaksa |
| JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Android. |
| JavaCast<TResult>(IJavaObject) |
Bantuan sinkronisasi yang memungkinkan sekumpulan utas untuk semua menunggu satu sama lain mencapai titik pembatas umum. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Cobalah untuk memaksa |