Kapsamlı değerler
ThreadLocal tuzakları olmadan çağrı yığınları arasında güvenle veri paylaşın.
Kod Karşılaştırması
✕ Java 8
static final ThreadLocal<User> CURRENT =
new ThreadLocal<>();
void handle(Request req) {
CURRENT.set(authenticate(req));
try { process(); }
finally { CURRENT.remove(); }
}
✓ Java 25
static final ScopedValue<User> CURRENT =
ScopedValue.newInstance();
void handle(Request req) {
ScopedValue.where(CURRENT,
authenticate(req)
).run(this::process);
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Değiştirilemez
Çağrılanlar kapsamlı değeri okuyabilir ama asla değiştiremez.
Otomatik temizleme
Elle remove() gerekmez — değer blokla sınırlıdır.
Sanal iş parçacığı güvenli
Milyonlarca sanal iş parçacığıyla verimli çalışır.
Eski Yaklaşım
ThreadLocal
Modern Yaklaşım
ScopedValue
JDK'dan itibaren
25
Zorluk
İleri
JDK Desteği
Kapsamlı değerler
Mevcut
JDK 25 LTS'de kesinleşti (JEP 506, Eylül 2025).
Nasıl çalışır
ScopedValue; değiştirilemez, miras alınabilir, kapsam sınırlı bağlam sağlar. ThreadLocal'dan farklı olarak kapsamlı değerler otomatik temizlenir, sanal iş parçacıklarıyla çalışır ve çağrılanlar tarafından değiştirilemez.
İlgili Belgeler