İçeriğe geç

Hatalı Senkronizasyon (ARCH4039)

Anahtar java.async.improper-synchronization · Önem warning · Kategori async

Değiştirilebilir/non-final bir nesne üzerinde, herkese açık bir monitör üzerinde ya da volatile olmadan çift kontrollü kilitleme ile senkronize etmek kilitlemeyi etkisiz kılar.

class Cache {
private Object lock = new Object(); // non-final, değişebilir
void put(String k, String v) {
synchronized (lock) { map.put(k, v); }
}
}
class Cache {
private final Object lock = new Object(); // final, özel monitör
void put(String k, String v) {
synchronized (lock) { map.put(k, v); }
}
}

Özel, final bir kilit nesnesi üzerinde senkronize edin; çift kontrollü kilitlemede alanı volatile yapın.