Concurrency İleri

ThreadLocal tuzakları olmadan çağrı yığınları arasında güvenle veri paylaşın.

✕ 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.
🔒

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
Kapsamlı değerler
Mevcut

JDK 25 LTS'de kesinleşti (JEP 506, Eylül 2025).

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.

Paylaş 𝕏 🦋 in