Est-ce que faire un verrou réentrant statique et en faire un mutex?

Dans le livre de Brian Goetz, Java Concurrency in Practice, son exemple de verrou réentrant est programmé comme suit:

Lock lock = new ReentrantLock(); 

Cependant, je suis curieux de savoir si changer le code ci-dessus en:

 private static final Lock lock = new ReentrantLock(); 

fait que le verrou agisse maintenant comme un mutex, ou s’il est inutile et redondant.

Ainsi, la fonctionnalité de ce code change-t-elle si le verrou est rendu privé, statique et final?

 lock.lock(); try { //method stuff } finally { lock.unlock(); } 

Merci d’avance à tous. Mat

Oui.

final et private n’ont bien sûr aucune influence, mais static signifie que toutes les instances partagent le même verrou.

Donc, si vous avez deux instances, le bloc de code ne peut pas être exécuté par deux threads en même temps.

Si le verrou n’est pas statique, chaque instance obtient son propre verrou. Cela signifie que plusieurs threads peuvent exécuter le code en même temps (en fonction de l’instance avec laquelle ils travaillent, bien sûr).

Créer un verrou statique est équivalent à

 synchronized(MyClass.class){ } 

C’est essentiellement un verrou de niveau de classe