Ce este Lock(), UnLock(), ReentrantLock(), TryLock() și cum este diferit de Synchronized Block în Java?]

Publicat: 2020-07-05

În acest tutorial vom trece peste Lock(), UnLock(), ReentrantLock(), TryLock() și cum este diferit de Synchronized Block în Java.

Dacă aveți și întrebări de mai jos, atunci sunteți în locul potrivit.

  • Blocări în Java
  • Exemplu de blocare Java și blocare simultană vs sincronizat
  • Tutorial Java Concurrency – Blocări reentrante
  • sincronizare – Utilizarea corectă a blocării/deblocării pentru Java
  • java – Sincronizare vs Blocare
  • exemplu de deblocare cu blocare java
  • mecanism de blocare în java
  • java lock debloca diferite fire

Să începem. În primul rând, să înțelegem fiecare dintre acești termeni și apoi vom trece peste exemplu de lucru.

Lacăt():

java.util.concurrent.locks . O blocare este un mecanism de sincronizare a firelor de execuție precum blocurile sincronizate, cu excepția faptului că blocările pot fi mai sofisticate decât blocurile sincronizate Java. Este o interfață și clase care oferă un cadru pentru blocarea și așteptarea condițiilor care este diferită de sincronizarea și monitoare încorporate.

Deblocare():

UnLock() eliberează blocarea pe Object.

ReentrantLock():

Un ReentrantLock este deținut de ultimul fir care s-a blocat cu succes, dar nu l-a deblocat încă. Un fir care invocă lock va reveni, dobândind cu succes blocarea, atunci când blocarea nu este deținută de un alt fir. Metoda va reveni imediat dacă firul curent deține deja blocarea.

TryLock():

TryLock() dobândește blocarea numai dacă este liberă în momentul invocării.

Sfat-1

Dacă pur și simplu blocați un obiect, aș prefera să folosesc synchronized.

În timp ce cu sincronizarea, este foarte clar și imposibil să greșești:

Exemplu de detalii:

  1. Creați clasa: CrunchifyLockTutorial.java
  2. Creați clase interioare: Company și CrunchifyLoop
  3. Din Main creați două obiecte din clasa Company
  4. Începeți bucla de fir pentru 10 pe acele obiecte
  5. În timp ce Compania1 vorbește cu Compania2 – blochează un obiect. Dacă în același timp – dacă Company2 dorește să vorbească cu Company1 , atunci se spune – În conflict – Blocarea există deja. (Ambele companii sunt deja în discuție).

Ieșire:

Sfat-2

Puteți realiza tot ceea ce fac utilitarele din java.util.concurrent cu primitivele de nivel scăzut, cum ar fi synchronized , volatile sau wait .