Co to jest Lock(), UnLock(), ReentrantLock(), TryLock() i czym różni się od zsynchronizowanego bloku w Javie?]

Opublikowany: 2020-07-05

W tym samouczku omówimy Lock(), UnLock(), ReentrantLock(), TryLock() i jak różni się on od Synchronized Block w Javie.

Jeśli masz również poniższe pytania, to jesteś we właściwym miejscu.

  • Blokady w Javie
  • Przykład blokady Java i blokada współbieżności a synchronizacja
  • Samouczek dotyczący współbieżności w języku Java — blokady wklęsłe
  • synchronizacja – Prawidłowe użycie blokady/odblokowania dla Javy
  • java – Synchronizacja vs Blokada
  • przykład odblokowania blokady java
  • mechanizm blokujący w java
  • blokada java odblokuj inny wątek

Zacznijmy. Najpierw zrozummy każdy z tych terminów, a następnie omówimy przykład roboczy.

Zablokować():

java.util.concurrent.locks . Blokada jest mechanizmem synchronizacji wątków, podobnie jak zsynchronizowane bloki, z wyjątkiem tego, że blokady mogą być bardziej wyrafinowane niż zsynchronizowane bloki Javy. Jest to interfejs i klasy zapewniające strukturę blokowania i oczekiwania na warunki, które różnią się od wbudowanej synchronizacji i monitorów.

Odblokować():

UnLock() zwalnia blokadę obiektu.

ReentrantLock():

ReentrantLock jest własnością wątku jako ostatniego pomyślnego zablokowania, ale jeszcze go nie odblokowuje. Wątek wywołujący lock zwróci, pomyślnie pobierając blokadę, gdy blokada nie jest własnością innego wątku. Metoda zwróci natychmiast, jeśli bieżący wątek jest już właścicielem blokady.

TryLock():

TryLock() uzyskuje blokadę tylko wtedy, gdy jest ona wolna w momencie wywołania.

Wskazówka-1

Jeśli po prostu blokujesz obiekt, wolałbym użyć synchronized.

Podczas gdy z synchronizacją jest to bardzo jasne i niemożliwe do pomyłki:

Przykładowe szczegóły:

  1. Utwórz klasę: CrunchifyLockTutorial.java
  2. Twórz klasy wewnętrzne: Company i CrunchifyLoop
  3. Z Main stwórz dwa obiekty klasy Company
  4. Uruchom pętlę wątku dla 10 na tych obiektach
  5. Podczas gdy Firma1 rozmawia z Firmą2 – blokuje obiekt. Jeśli w tym samym czasie — jeśli Company2 chce rozmawiać z Company1 , to mówi — Konflikt — Blokada już istnieje. (Obie firmy już rozmawiają).

Wyjście:

Wskazówka-2

Wszystko, co narzędzia w java.util.concurrent , można osiągnąć za pomocą prymitywów niskiego poziomu, takich jak synchronized , volatile lub wait .