pmf
pmf

Reputation: 7749

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.

Upvotes: 1

Views: 317

Answers (2)

Adriaan Koster
Adriaan Koster

Reputation: 16209

The typical use case (as far as I know) for a ThreadLocal is in a web application framework. An HTTP filter obtains a database connection on an incoming request, and stores the connection in a static ThreadLocal. All subsequent controllers needing the connection can easily obtain it from the framework using a static call. When the response is returned, the same filter releases the connection again.

Upvotes: 0

Jonathan Feinberg
Jonathan Feinberg

Reputation: 45324

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>.

Upvotes: 9

Related Questions