Ésta es mi clase de Java 1.6:¿Qué significa "sincronización inconsistente"?
public class Foo {
private ArrayList<String> names;
public void scan() {
if (names == null) {
synchronized (this) {
this.names = new ArrayList<String>();
// fill the array with data
}
}
}
}
Findbugs dice:
Inconsistent synchronization of com.XXX.Foo.names; locked 40% of time
¿Qué significa y qué estoy haciendo mal? Estoy tratando de evitar problemas cuando dos o más clientes llaman al Foo.scan()
al mismo tiempo.
Si usted planea usar este lenguaje, la variable nombres están marcados como volátil. –
También debe verificar si 'names' es nulo antes de ingresar al bloque sychrnoize. Esto evita el bloqueo cuando no es necesario. – Jeremy
@Phil M ¿por qué los nombres se deben marcar como volátiles? Pensé que sincronizado proporciona la misma visibilidad que volátil. Entonces no agregará nada siempre y cuando todo acceso a los nombres use el mismo candado. – brain