CountDownLatch 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 satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai.
[Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)]
public class CountDownLatch : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)>]
type CountDownLatch = class
inherit Object
- Warisan
- Atribut
Keterangan
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai.
CountDownLatch diinisialisasi dengan jumlah<>/em< tertentu>. Metode #await await memblokir sampai jumlah saat ini mencapai nol karena pemanggilan #countDown metode, setelah itu semua utas tunggu dirilis dan pemanggilan #await await pengembalian berikutnya segera. Ini adalah fenomena satu tembakan -- hitungan tidak dapat diatur ulang. Jika Anda memerlukan versi yang mengatur ulang hitungan, pertimbangkan untuk CyclicBarriermenggunakan .
adalah CountDownLatch alat sinkronisasi serbaguna dan dapat digunakan untuk sejumlah tujuan. Yang CountDownLatch diinisialisasi dengan hitungan satu berfungsi sebagai kait on/off sederhana, atau gerbang: semua utas memanggil #await await tunggu di gerbang sampai dibuka oleh utas yang memanggil #countDown. NCountDownLatch/em< yang diinisialisasi ><>dapat digunakan untuk membuat satu utas menunggu sampai <utas N>/em< em>menyelesaikan beberapa tindakan, atau beberapa tindakan telah selesai N kali.
Properti yang CountDownLatch berguna adalah bahwa tidak mengharuskan utas memanggil countDown menunggu jumlah mencapai nol sebelum melanjutkan, itu hanya mencegah utas melanjutkan melewati #await await sampai semua utas bisa lulus.
<b>Penggunaan sampel:</b> Berikut adalah sepasang kelas di mana sekelompok utas pekerja menggunakan dua kait hitung mundur: <ul><li>Yang pertama adalah sinyal awal yang mencegah pekerja melanjutkan sampai driver siap untuk mereka lanjutkan; <li>Yang kedua adalah sinyal penyelesaian yang memungkinkan pengemudi menunggu sampai semua pekerja selesai. </Ul>
{@code
class Driver { // ...
void main() throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(N);
for (int i = 0; i < N; ++i) // create and start threads
new Thread(new Worker(startSignal, doneSignal)).start();
doSomethingElse(); // don't let run yet
startSignal.countDown(); // let all threads proceed
doSomethingElse();
doneSignal.await(); // wait for all to finish
}
}
class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await();
doWork();
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { ... }
}}
Penggunaan umum lainnya adalah membagi masalah menjadi bagian N, menjelaskan setiap bagian dengan Runnable yang menjalankan bagian tersebut dan menghitung mundur pada kait, dan mengantrekan semua Runnables ke Pelaksana. Ketika semua sub-bagian selesai, utas koordinasi akan dapat melewati menunggu. (Ketika utas harus berulang kali menghitung mundur dengan cara ini, sebagai gantinya gunakan CyclicBarrier.)
{@code
class Driver2 { // ...
void main() throws InterruptedException {
CountDownLatch doneSignal = new CountDownLatch(N);
Executor e = ...;
for (int i = 0; i < N; ++i) // create and start threads
e.execute(new WorkerRunnable(doneSignal, i));
doneSignal.await(); // wait for all to finish
}
}
class WorkerRunnable implements Runnable {
private final CountDownLatch doneSignal;
private final int i;
WorkerRunnable(CountDownLatch doneSignal, int i) {
this.doneSignal = doneSignal;
this.i = i;
}
public void run() {
doWork();
doneSignal.countDown();
}
void doWork() { ... }
}}
Efek konsistensi memori: Hingga jumlah mencapai nol, tindakan dalam utas sebelum memanggil countDown()<tindakan i>happen-before</i> setelah pengembalian yang berhasil dari yang sesuai await() di utas lain.
Ditambahkan dalam 1.5.
Java dokumentasi untuk java.util.concurrent.CountDownLatch.
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 |
|---|---|
| CountDownLatch(Int32) |
Membangun yang |
| CountDownLatch(IntPtr, JniHandleOwnership) |
Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime. |
Properti
| Nama | Deskripsi |
|---|---|
| Class |
Mengembalikan kelas runtime dari . |
| Count |
Mengembalikan jumlah saat ini. |
| Handle |
Handel ke instans Android yang mendasar. (Diperoleh dari Object) |
| JniIdentityHashCode |
Mendapatkan kode hash identitas yang ditetapkan ke Java peer ini oleh runtime interop. (Diperoleh dari Object) |
| JniManagedPeerState |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| JniPeerMembers |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. |
| 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() |
Menyebabkan utas saat ini menunggu hingga kait dihitung ke nol, kecuali utasnya adalah Thread#interupted. |
| Await(Int64, TimeUnit) |
Menyebabkan utas saat ini menunggu hingga kait dihitung ke nol, kecuali utasnya adalah Thread#interuppt, atau waktu tunggu yang ditentukan berlalu. |
| AwaitAsync() |
Secara asinkron menunggu sampai jumlah kait mencapai nol. |
| AwaitAsync(Int64, TimeUnit) |
Secara asinkron menunggu sampai jumlah kait mencapai nol atau waktu tunggu yang ditentukan berlalu. |
| Clone() |
Membuat dan mengembalikan salinan objek ini. (Diperoleh dari Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| CountDown() |
Mengurangi jumlah kait, melepaskan semua utas tunggu jika jumlahnya mencapai nol. |
| 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 satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| Equals(Object) |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (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) |
| SetHandle(IntPtr, JniHandleOwnership) |
Mengatur properti Handle. (Diperoleh dari Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (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 satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| IJavaPeerable.Finalized() |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (Diperoleh dari JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Bantuan sinkronisasi yang memungkinkan satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. (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 satu atau beberapa utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Cobalah untuk memaksa |