Kilitlenmesiz tembel başlatma
Tembel singleton'lar için çift kontrollü kilitleme yerine StableValue kullanın.
Kod Karşılaştırması
✕ 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.
Modern yöntem neden daha iyi
Ş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
JDK Desteği
Kilitlenmesiz tembel başlatma
Önizleme
JDK 25'te önizleme (JEP 502, StableValue). --enable-preview gerektirir.
Nasıl çalışır
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.
İlgili Belgeler