Valeurs à portée
Partagez des données le long de la pile d'appels en toute sécurité sans les problèmes de ThreadLocal.
Comparaison de Code
✕ 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);
}
Un problème avec ce code ? Dites-le nous.
Pourquoi la méthode moderne gagne
Immutable
Les méthodes appelées peuvent lire mais jamais modifier la valeur à portée.
Nettoyage automatique
Sans remove() manuel — la valeur est limitée au bloc.
Compatible avec les threads virtuels
Fonctionne efficacement avec des millions de threads virtuels.
Ancienne Approche
ThreadLocal
Approche Moderne
ScopedValue
Depuis JDK
25
Difficulté
Avancé
Support JDK
Valeurs à portée
Disponible
Finalisé dans JDK 25 LTS (JEP 506, sept. 2025).
Comment ça fonctionne
ScopedValue fournit un contexte immutable, héritable et limité à une portée. Contrairement à ThreadLocal, les valeurs à portée sont nettoyées automatiquement, fonctionnent avec les threads virtuels et ne peuvent pas être modifiées par les méthodes appelées.
Documentation Associée