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.
Hatalı
Bölüm başlığı “Hatalı”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); } }}Düzeltme
Bölüm başlığı “Düzeltme”Özel, final bir kilit nesnesi üzerinde senkronize edin; çift kontrollü kilitlemede alanı volatile yapın.