Che cos'è Lock(), UnLock(), ReentrantLock(), TryLock() e come è diverso da Synchronized Block in Java?]

Pubblicato: 2020-07-05

In questo tutorial esamineremo Lock(), UnLock(), ReentrantLock(), TryLock() e come è diverso da Synchronized Block in Java.

Se hai anche domande di seguito, sei nel posto giusto.

  • Si blocca in Java
  • Esempio di blocco Java e blocco della concorrenza rispetto a sincronizzato
  • Esercitazione sulla concorrenza Java – Blocchi rientranti
  • sincronizzazione – Utilizzo corretto di blocco/sblocco per Java
  • java – Sincronizzazione vs Blocco
  • esempio di sblocco java lock
  • meccanismo di blocco in java
  • java lock sblocca thread diversi

Iniziamo. Per prima cosa comprendiamo ciascuno di questi termini e poi esamineremo l'esempio di lavoro.

Serratura():

java.util.concurrent.locks . Un blocco è un meccanismo di sincronizzazione dei thread come i blocchi sincronizzati, tranne per il fatto che i blocchi possono essere più sofisticati dei blocchi sincronizzati di Java. Si tratta di interfacce e classi che forniscono un framework per il blocco e l'attesa di condizioni diverse dalla sincronizzazione e dai monitor integrati.

Sbloccare():

UnLock() rilascia il blocco su Object.

ReentrantLock():

Un ReentrantLock è di proprietà dell'ultimo thread che si è bloccato correttamente, ma non lo ha ancora sbloccato. Un thread che richiama il lock verrà restituito, acquisendo correttamente il blocco, quando il blocco non è di proprietà di un altro thread. Il metodo verrà restituito immediatamente se il thread corrente possiede già il blocco.

TryLock():

TryLock() acquisisce il blocco solo se è libero al momento dell'invocazione.

Suggerimento-1

Se stai semplicemente bloccando un oggetto, preferirei usare synchronized.

Considerando che con sincronizzato, è super chiaro e impossibile sbagliare:

Dettagli di esempio:

  1. Crea classe: CrunchifyLockTutorial.java
  2. Crea classi interne: Company e CrunchifyLoop
  3. Da Main creare due oggetti di classe Company
  4. Avvia thread loop per 10 su quegli oggetti
  5. Mentre Company1 parla con Company2, blocca un oggetto. Se allo stesso tempo – se Company2 vuole parlare con Company1 allora dice – Conflicting – Lock esiste già. (Entrambe le società sono già in discussione).

Produzione:

Suggerimento-2

Puoi ottenere tutto ciò che le utilità in java.util.concurrent fanno con le primitive di basso livello come synchronized , volatile o wait .