In addition to what @aioobe said, consider the InheritableThreadLocal case, in which the local value is passed from the thread to each child thread that it creates.
And as @pst says, there is nothing to prevent the use of the same value in different (non-inherited) ThreadLocal s.
In short, you need to conduct a thorough analysis of the flow locales, how to initialize them, and how to use them before you can safely conclude that they should not be thread safe.
source share