Je suis à la recherche à un code existant qui a l'idiome suivant:copies des variables Synchronisé et locales
Map<String, Boolean> myMap = someGlobalInstance.getMap();
synchronized (myMap) {
item = myMap.get(myKey);
}
L'avertissement que je reçois des inspections de code de Intelli-J est:
Synchronization on local variable 'myMap'
Est ceci la synchronisation appropriée et pourquoi?
Map<String, Boolean> myMap = someGlobalInstance.getMap();
synchronized (someGlobalInstance.getMap()) {
item = myMap.get(myKey);
}
J'ai une question de suivi basée sur le premier paragraphe de votre réponse. Pouvez-vous expliquer un peu pourquoi la synchronisation sur les variables locales est généralement une mauvaise idée? Est-ce une mauvaise idée lorsque nous instancions les champs à l'intérieur de la méthode? – Geek
@Geek: le point sur la synchronisation est que vous utilisez un objet qui est partagé avec d'autres threads (sinon il ne fait rien). Si vous utilisez une variable locale comme référence, cela peut ou non être le cas. –