Concurrency İleri

Kilitlenmesiz tembel başlatma

Tembel singleton'lar için çift kontrollü kilitleme yerine StableValue kullanın.

✕ Java 8
class Config {
    private static volatile Config inst;
    static Config get() {
        if (inst == null) {
            synchronized (Config.class) {
                if (inst == null)
                    inst = load();
            }
        }
        return inst;
    }
}
✓ Java 25 (Preview)
class Config {
    private static final
        StableValue<Config> INST =
            StableValue.of(Config::load);

    static Config get() {
        return INST.get();
    }
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🧹

Şablonsuz kod yok

volatile, synchronized veya çift null kontrolü yok.

Daha hızlı okumalar

JVM başlatma sonrasında değeri sabit katlamaya alabilir.

Kanıtlanmış doğruluk

İnce sıralama hataları yok — JVM halleder.

Eski Yaklaşım
synchronized + volatile
Modern Yaklaşım
StableValue
JDK'dan itibaren
25
Zorluk
İleri
Kilitlenmesiz tembel başlatma
Önizleme

JDK 25'te önizleme (JEP 502, StableValue). --enable-preview gerektirir.

StableValue, doğru iş parçacığı güvenliğiyle tembel başlatma kalıbını kapsüller. JVM, başlatma sonrasında okuma yolunu optimize edebilir; bu da onu volatile okumalardan daha hızlı yapabilir.

Paylaş 𝕏 🦋 in