English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il existe deux méthodes pour verrouiller des ressources partagées par plusieurs threads. L'une est le verrou réentrant (ou ReadWriteLock), et l'autre consiste à utiliser la méthode Synchronized.
Java 5La classe ReentrantLock est fournie dans le package Java concurrent.
C'est une implémentation de l'interface Lock, selon les java docs, l'implémentation de l'interface Lock fournit des opérations plus larges que celles obtenues en utilisant les méthodes synchronisées.
Numéro | Clé | Verrou réentrant | Synchronisé |
---|---|---|---|
1 | Obtenir un verrou | La classe de verrou réentrant fournitlock() Les méthodes pour obtenir le verrou des ressources partagées par le thread | Vous n'avez besoin que de la clé synced pour obtenir le verrou |
2 | Libération du verrou | Pour libérer le verrou, le programmeur doit appelerunlock() Méthode | Termination implicite |
3 | Capacité de rompre | La méthode lockInterruptible() peut être utilisée pour rompre un thread | Il n'y a pas de moyen de rompre un thread |
4 | Équité | Ce type de constructeur a un paramètre équitable. Si vous le définissez sur true, le verrou sera attribué au thread en attente le plus longtemps *Droits d'accès des threads | Les verrous ne garantissent pas un accès spécifique |
5 | Ordre de libération des verrous | Les verrous peuvent être libérés dans n'importe quel ordre | Les verrous doivent être libérés dans l'ordre d'acquisition |
public class ReentrantLockExample implements Runnable{ private Lock lock = new ReentrantLock(); @Override public void run() { try { lock.lock() //Verrouiller certains ressources } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (ressource) { //Verrouiller certains ressources } } }