Ir al contenido

Improper Synchronization (ARCH4039)

Esta página aún no está disponible en tu idioma.

Key java.async.improper-synchronization · Severity warning · Category async

Synchronizing on a mutable/non-final object, on a publicly accessible monitor, or doing double-checked locking without volatile renders the locking ineffective.

class Cache {
private Object lock = new Object(); // non-final, reassignable
void put(String k, String v) {
synchronized (lock) { map.put(k, v); }
}
}
class Cache {
private final Object lock = new Object(); // final, private monitor
void put(String k, String v) {
synchronized (lock) { map.put(k, v); }
}
}

Synchronize on a private, final lock object; make the field volatile for double-checked locking.