Zum Inhalt springen

Improper Synchronization (ARCH4039)

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

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.