CyclicBarrier Kelas

Definisi

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
CyclicBarrier
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 yang akan melakukan perjalanan ketika sejumlah pihak (utas) yang diberikan menunggunya, dan yang akan menjalankan tindakan pembatas yang diberikan ketika hambatan tersandung, yang dilakukan oleh utas terakhir yang memasuki hambatan.

CyclicBarrier(Int32)

Membuat baru CyclicBarrier yang akan melakukan perjalanan ketika sejumlah pihak (utas) yang diberikan menunggunya, dan tidak melakukan tindakan yang telah ditentukan sebelumnya ketika hambatan tersandung.

CyclicBarrier(IntPtr, JniHandleOwnership)

Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime.

Properti

Nama Deskripsi
Class

Mengembalikan kelas runtime dari .Object

(Diperoleh dari Object)
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 ini.

Await(Int64, TimeUnit)

Tunggu hingga semua pihak #getParties memanggil await penghalang ini, atau waktu tunggu yang ditentukan berlalu.

AwaitAsync()

Secara asinkron menunggu sampai semua pihak memanggil await penghubung ini.

AwaitAsync(Int64, TimeUnit)

Secara asinkron menunggu sampai semua pihak memanggil await penghubung ini.

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 self.

JavaAs<TResult>(IJavaPeerable)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

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 self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

Berlaku untuk