Kısa özet:
Semaphore
ve CountDownLatch
farklı amaca hizmet eder.
Kaynağa Semaphore
iş parçacığı erişimini kontrol etmek için kullanın .
CountDownLatch
Tüm iş parçacıklarının tamamlanmasını beklemek için kullanın
Semaphore
Javadocs'tan tanım:
A Semaphore
, bir dizi izne sahiptir. acquire()
Bir izin mevcut olana kadar gerekirse her blok ve ardından onu alır. Her biri release()
bir izin ekler ve potansiyel olarak bir engelleyici ediniciyi serbest bırakır.
Ancak, hiçbir gerçek izin nesnesi kullanılmaz; Semaphore
Sadece mevcut sayımını tutar ve ona göre davranır.
O nasıl çalışır?
Semaforlar, bir kaynağı kullanan eşzamanlı iş parçacığı sayısını kontrol etmek için kullanılır.Bu kaynak, paylaşılan bir veri veya bir kod bloğu ( kritik bölüm ) veya herhangi bir dosya gibi bir şey olabilir .
Bir sayıya göre Semaphore
çıkıp farklı ipler dediğimiz gibi aşağı olabilir acquire()
ve release()
. Ancak herhangi bir noktada, Semafor sayısından daha fazla sayıda iş parçacığına sahip olamazsınız.
Semaphore
Kullanım durumları:
- Diske eşzamanlı erişimi sınırlama (bu, rakip disk aramaları nedeniyle performansı öldürebilir)
- Konu oluşturma sınırlaması
- JDBC bağlantı havuzu oluşturma / sınırlama
- Ağ bağlantısı kısıtlama
- CPU veya bellek yoğun görevleri kısma
Semafor kullanımları için bu makaleye bir göz atın .
CountDownLatch
Javadocs'tan tanım:
Bir veya daha fazla iş parçacığının diğer iş parçacıklarında gerçekleştirilen bir dizi işlem tamamlanana kadar beklemesine izin veren bir senkronizasyon yardımı.
O nasıl çalışır?
CountDownLatch
iş parçacığı sayısıyla başlatılan bir sayaca sahip olarak çalışır ve bu, bir iş parçacığının yürütülmesini her tamamladığında azaltılır. Count sıfıra ulaştığında, tüm iş parçacığı yürütmeyi tamamlamış demektir ve mandalda bekleyen iş parçacığı yürütmeyi sürdürür.
CountDownLatch
Kullanım durumları:
- Maksimum Paralelliği Elde Etme: Bazen maksimum paralellik elde etmek için aynı anda birkaç iş parçacığı başlatmak isteriz
- Yürütmeye başlamadan önce N iş parçacığının tamamlanmasını bekleyin
- Kilitlenme tespiti.
Kavramları net bir şekilde anlamak için bu makaleye bir göz atın CountDownLatch
.
Bu makaledeki Fork Join Pool'a da bir göz atın . İle bazı benzerlikleri vardır .CountDownLatch