English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Numero | Chiave | Blocco reentrant | Sincronizzato |
---|---|---|---|
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 |
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(); } } }
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (resource) { //Bloccare alcune risorse } } }