Krótkie podsumowanie:
Semaphorei CountDownLatchsłuży różnym celom.
Służy Semaphoredo kontrolowania dostępu wątków do zasobu.
Służy CountDownLatchdo czekania na zakończenie wszystkich wątków
Semaphore definicja z Javadocs:
A Semaphoreutrzymuje zestaw zezwoleń. Każdy acquire()blokuje się, jeśli to konieczne, aż do uzyskania zezwolenia , a następnie je przyjmuje. Każdy release()dodaje zezwolenie, potencjalnie zwalniając blokującego nabywcę.
Jednak żadne rzeczywiste obiekty zezwoleń nie są używane; po Semaphoreprostu liczy dostępną liczbę i działa odpowiednio.
Jak to działa?
Semafory są używane do kontrolowania liczby współbieżnych wątków, które używają zasobu. Może to być coś w rodzaju udostępnionych danych, blok kodu ( sekcja krytyczna ) lub dowolny plik.
Liczba na a Semaphoremoże rosnąć i maleć, gdy różne wątki wywołują acquire()i release(). Ale w dowolnym momencie nie możesz mieć większej liczby wątków niż liczba semaforów.
Semaphore Przypadków użycia:
- Ograniczenie równoczesnego dostępu do dysku (może to spowodować utratę wydajności z powodu wyszukiwania konkurencyjnych dysków)
- Ograniczenie tworzenia wątków
- Buforowanie / ograniczanie połączeń JDBC
- Ograniczanie przepustowości połączenia sieciowego
- Dławienie zadań intensywnie wykorzystujących procesor lub pamięć
Zapoznaj się z tym artykułem dotyczącym zastosowań semaforów.
CountDownLatch definicja z Javadocs:
Pomoc w synchronizacji, która pozwala jednemu lub większej liczbie wątków czekać na zakończenie zestawu operacji wykonywanych w innych wątkach.
Jak to działa?
CountDownLatchdziała poprzez zainicjowanie licznika liczbą wątków, która jest zmniejszana za każdym razem, gdy wątek kończy wykonywanie. Gdy liczba osiągnie zero, oznacza to, że wszystkie wątki zakończyły wykonywanie, a wątek oczekujący na zatrzask wznawia wykonywanie.
CountDownLatch Przypadków użycia:
- Osiągnięcie maksymalnego równoległości: Czasami chcemy rozpocząć kilka wątków w tym samym czasie, aby osiągnąć maksymalną równoległość
- Poczekaj na zakończenie N wątków przed rozpoczęciem wykonywania
- Wykrywanie zakleszczenia.
Zapoznaj się z tym artykułem, aby dobrze zrozumieć CountDownLatchpojęcia.
Zajrzyj też do Fork Join Pool w tym artykule . Ma pewne podobieństwa do CountDownLatch.