Kararlı değerler
volatile veya synchronized olmadan iş parçacığı güvenli tembel başlatma.
Kod Karşılaştırması
✕ Java 8
private volatile Logger logger;
Logger getLogger() {
if (logger == null) {
synchronized (this) {
if (logger == null)
logger = createLogger();
}
}
return logger;
}
✓ Java 25 (Preview)
private final StableValue<Logger> logger =
StableValue.of(this::createLogger);
Logger getLogger() {
return logger.get();
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Sıfır şablonsuz kod
volatile, synchronized veya null kontrolleri yok.
JVM-optimize
JVM başlatma sonrasında değeri katlayabilir.
Bir kez garantili
Sağlayıcı, çakışma altında bile yalnızca bir kez çalışır.
Eski Yaklaşım
Çift Kontrollü Kilitleme
Modern Yaklaşım
StableValue
JDK'dan itibaren
25
Zorluk
İleri
JDK Desteği
Kararlı değerler
Önizleme
JDK 25'te önizleme (JEP 502). --enable-preview gerektirir.
Nasıl çalışır
StableValue, yerleşik iş parçacığı güvenliğiyle tembel başlatılmış, değiştirilemez bir değer sağlar. Çift kontrollü kilitleme yok, volatile alan yok, synchronized blok yok. JVM başlatma sonrasında okuma yolunu bile optimize edebilir.
İlgili Belgeler