Ringkasan singkat:
Semaphore
dan CountDownLatch
melayani tujuan yang berbeda.
Gunakan Semaphore
untuk mengontrol akses utas ke sumber daya.
Gunakan CountDownLatch
untuk menunggu penyelesaian semua utas
Semaphore
definisi dari Javadocs:
A Semaphore
memiliki satu set izin. Setiap acquire()
blok jika perlu sampai izin tersedia, dan kemudian mengambilnya. Masing-masing release()
menambahkan izin, berpotensi melepaskan pengakuisisi pemblokiran.
Namun, sebenarnya tidak ada objek izin yang digunakan; yang Semaphore
hanya menyimpan hitungan jumlah yang tersedia dan bertindak sesuai.
Bagaimana cara kerjanya?
Semaphore digunakan untuk mengontrol jumlah thread bersamaan yang menggunakan resource. Resource tersebut dapat berupa data bersama, atau blok kode ( bagian kritis ) atau file apa pun.
Hitungan Semaphore
dapat naik dan turun sebagai utas yang berbeda memanggil acquire()
dan release()
. Tetapi pada titik waktu mana pun, Anda tidak dapat memiliki lebih banyak jumlah utas lebih dari jumlah Semaphore.
Semaphore
Kasus penggunaan:
- Membatasi akses bersamaan ke disk (ini dapat mematikan kinerja karena persaingan pencarian disk)
- Pembatasan pembuatan benang
- Penyatuan / pembatasan koneksi JDBC
- Pelambatan koneksi jaringan
- Menghambat tugas CPU atau memori yang intensif
Lihat artikel ini untuk penggunaan semafor.
CountDownLatch
definisi dari Javadocs:
Bantuan sinkronisasi yang memungkinkan satu atau lebih utas menunggu hingga serangkaian operasi dilakukan di utas lain selesai.
Bagaimana cara kerjanya?
CountDownLatch
bekerja dengan memiliki penghitung yang diinisialisasi dengan jumlah utas, yang berkurang setiap kali utas menyelesaikan eksekusinya. Saat hitungan mencapai nol, itu berarti semua utas telah menyelesaikan eksekusinya, dan utas yang menunggu di kait melanjutkan eksekusi.
CountDownLatch
Kasus penggunaan:
- Mencapai Paralelisme Maksimum: Terkadang kami ingin memulai sejumlah utas pada saat yang sama untuk mencapai paralelisme maksimum
- Tunggu N utas selesai sebelum memulai eksekusi
- Deteksi kebuntuan.
Lihat artikel ini untuk memahami CountDownLatch
konsep dengan jelas.
Lihat juga Fork Join Pool di artikel ini . Ini memiliki beberapa kesamaan dengan CountDownLatch
.