capypad
0 Tage Serie
java / expert
Snippet

Scoped Values für leichtgewichtiges Data-Sharing

Scoped Values (JEP 446) bieten eine moderne, threadsichere Alternative zu ThreadLocal. Sie wurden speziell für virtuelle Threads entwickelt und ermöglichen das effiziente, unveränderliche Teilen von Daten über Methodengrenzen hinweg, ohne den Speicher-Overhead und die Komplexität traditioneller Thread-Locals.

snippet.java
java
1
2
3
4
5
6
7
public final static ScopedValue<User> CURRENT_USER = ScopedValue.newInstance();
 
void processRequest(User user) {
ScopedValue.where(CURRENT_USER, user).run(() -> {
service.performTask(); // Inherits the value
});
}
Erklärung
1
public final static ScopedValue<User> CURRENT_USER = ScopedValue.newInstance();
Definiert einen globalen ScopedValue-Container, der die kontextbezogenen Daten hält.
2
ScopedValue.where(CURRENT_USER, user).run(() -> { ... });
Bindet einen Wert an den Scope und führt die Logik aus; der Wert wird danach automatisch entfernt.