English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

La differenza tra ReentrantLock e la sincronizzazione in Java

Ci sono due metodi per bloccare risorse condivise tramite più thread. Uno è il lock reentrant (o ReadWriteLock), l'altro è utilizzare il metodo synchronized.

La classe ReentrantLock è fornita nel pacchetto di concorrenza di Java 5. 

È un'implementazione dell'interfaccia Lock, secondo i documenti java, l'implementazione dell'interfaccia Lock fornisce operazioni più ampie rispetto a quelle ottenibili utilizzando i metodi di sincronizzazione.

NumeroChiaveBlocco reentrantSincronizzato
1
Acquisizione del blocco 
La classe di blocco reentrant forniscelock()Metodo per ottenere il blocco delle risorse condivise tramite thread 
Devi semplicemente scrivere la parola chiave synced per ottenere il blocco  
2
Rilascio del blocco 
Per rilasciare il blocco, il programmatore deve chiamareunlock()Metodo
Completamento implicito 
3
 Capacità di interrompere
Il metodo lockInterruptible() può essere utilizzato per interrompere il thread  
Non c'è modo di interrompere il thread
4
Equo 
Il costruttore di questo tipo ha un parametro equo. Se impostato su true, il blocco assegnerà l'accesso al thread in attesa più a lungo

Non si garantisce alcun particolare accesso
5
Ordine di rilascio delle chiavi 
Le chiavi possono essere rilasciate in qualsiasi ordine 
Le chiavi devono essere rilasciate nell'ordine di acquisizione 

Esempio di ReentrantLock

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //Bloccare alcune risorse
      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

Esempio di SynchronizedLock

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //Bloccare alcune risorse
      }
   }
}