1

我正在使用ThreadLocal变量(通过 Clojure 的 vars,但以下内容与ThreadLocalJava 中的普通 s 相同)并且经常遇到我无法确定某个代码路径将在同一个线程上或上采用的问题另一个线程。对于我控制下的代码,这显然不是什么大问题,但对于多态第三方代码,有时甚至没有办法静态确定假设单线程执行是否安全。

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

4

2 回答 2

9

然后不要使用 ThreadLocals!它们专门用于当您想要一个与线程关联的变量时,就好像有一个Map<Thread,T>.

于 2009-12-03T14:31:45.860 回答
0

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

于 2009-12-03T16:57:04.147 回答