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.
Incorrect
Section titled “Incorrect”class Cache { private Object lock = new Object(); // non-final, reassignable void put(String k, String v) { synchronized (lock) { map.put(k, v); } }}Correct
Section titled “Correct”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.