2009-12-03 61 views
1

我使用的是ThreadLocal变量(通过Clojure的变量,但以下内容与Java中的原始ThreadLocal相同),并且经常遇到以下问题:我无法确定某个代码路径将采取同一个线程或另一个线程。对于我的控制下的代码来说,这显然不是一个太大的问题,但对于多态第三方代码,有时甚至没有办法静态确定是否安全地假设单线程执行。难以使用的ThreadLocals

我倾向于认为这是一个固有的问题ThreadLocal s,但我想听听一些建议如何以安全的方式使用它们。

+2

你的代码和具体问题在哪里? – 2009-12-03 14:32:02

+0

如果你的官僚本能告诉你这是社区wiki,请随意标记我的问题。 – pmf 2009-12-03 14:46:16

+0

我不明白这个问题,ThreadLocal与多线程代码一起使用。如果你可以假设单线程执行使用局部变量... – pgras 2009-12-03 15:22:51

回答

9

然后不要使用ThreadLocals!当你想要一个与Thread相关的变量时,它们特别适用于你,就好像有一个Map<Thread,T>

+0

答案很简单!我会为你+1,但不幸的是我今天的选票全部没有了。 – Bombe 2009-12-03 14:37:46

0

ThreadLocal的典型用例(据我所知)是在一个Web应用程序框架中。 HTTP筛选器在传入请求上获取数据库连接,并将连接存储在静态ThreadLocal中。所有后续需要连接的控制器都可以使用静态调用从框架轻松获得。当返回响应时,同一个过滤器再次释放连接。