que estoy buscando en algún código heredado que tiene la siguiente expresión idiomática:sincronizados y locales copias de las variables
Map<String, Boolean> myMap = someGlobalInstance.getMap();
synchronized (myMap) {
item = myMap.get(myKey);
}
La advertencia que recibo de inspecciones de código de Intelli-J es:
Synchronization on local variable 'myMap'
Es esta es la sincronización adecuada y por qué?
Map<String, Boolean> myMap = someGlobalInstance.getMap();
synchronized (someGlobalInstance.getMap()) {
item = myMap.get(myKey);
}
Tengo una pregunta de seguimiento basada en el primer párrafo de su respuesta. ¿Puedes explicar un poco por qué la sincronización en variables locales suele ser una mala idea? ¿Es una mala idea cuando instanciamos los campos dentro del método? – Geek
@ Geek: el punto de la sincronización es que utilizas un objeto que se comparte con otros hilos (de lo contrario no hace nada). Si usa una variable local como referencia, este puede o no ser el caso. –