Java 25 ScopedValue lets downstream calls read request context without passing it through every method parameter. A binding lives only for a bounded dynamic scope; a nested binding of the same key temporarily takes precedence.
Structured child tasks can inherit the parent binding. Mutable values still require synchronization, and code outside the scope cannot read the expired binding.
When to use
Use it to pass read-mostly context such as a request ID through downstream calls.