Search code examples
javaconcurrencythread-local

ThreadLocals hard to use


I'm using ThreadLocal variables (through Clojure's vars, but the following is the same for plain ThreadLocals in Java) and very often run into the issue that I can't be sure that a certain code path will be taken on the same thread or on another thread. For code under my control this is obviously not too big a problem, but for polymorphic third party code there's sometimes not even a way to statically determine whether it's safe to assume single threaded execution.

I tend to think this is a inherent issue with ThreadLocals, but I'd like to hear some advise on how to use them in a safe way.


Solution

  • Then don't use ThreadLocals! They are specifically for when you want a variable that's associated with a Thread, as if there were a Map<Thread,T>.