我正在使用ThreadLocal
变量(通过Clojure的变量,但以下内容对于Java中的普通ThreadLocal
是相同的)并且经常遇到我无法确定的问题某个代码路径将在同一个线程或另一个线程上获取。对于我控制下的代码,这显然不是一个大问题,但对于多态第三方代码,有时甚至没有办法静态地确定假设单线程执行是否安全。
我倾向于认为这是ThreadLocal
的固有问题,但我想听听一些关于如何以安全的方式使用它们的建议。
答案 0 :(得分:9)
然后不要使用ThreadLocals!它们专门用于何时需要与Thread关联的变量,就像有Map<Thread,T>
一样。
答案 1 :(得分:0)
ThreadLocal的典型用例(据我所知)是在Web应用程序框架中。 HTTP筛选器获取传入请求的数据库连接,并将连接存储在静态ThreadLocal中。所有需要连接的后续控制器都可以使用静态调用从框架中轻松获取。返回响应时,同一过滤器会再次释放连接。