Concurrency Experte

Daten über den Aufruf-Stack sicher teilen ohne die Fallstricke von ThreadLocal.

✕ 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);
}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🔒

Unveränderlich

Aufgerufene Methoden können den Scoped Value lesen, aber nie ändern.

🧹

Automatische Bereinigung

Kein manuelles remove() — der Wert ist auf den Block beschränkt.

Virtual-Thread-sicher

Funktioniert effizient mit Millionen von Virtual Threads.

Alter Ansatz
ThreadLocal
Moderner Ansatz
ScopedValue
Seit JDK
25
Schwierigkeitsgrad
Experte
Scoped Values
Verfügbar

Finalisiert in JDK 25 LTS (JEP 506, Sept. 2025).

ScopedValue bietet unveränderlichen, vererbbaren, bereichsbegrenzten Kontext. Im Gegensatz zu ThreadLocal werden Scoped Values automatisch bereinigt, funktionieren mit Virtual Threads und können von aufgerufenen Methoden nicht verändert werden.

Teilen 𝕏 🦋 in