【问题标题】:ThreadLocals hard to useThreadLocals 难以使用
【发布时间】:2009-12-03 14:29:19
【问题描述】:

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

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

【问题讨论】:

  • 您的代码和具体问题在哪里?
  • 如果您的官僚直觉告诉您,请随时将我的问题标记为社区 wiki。
  • 我不明白这个问题, ThreadLocal 将与多线程代码一起使用。如果您可以假设单线程执行使用局部变量...
  • 我也不明白这个问题。

标签: java concurrency thread-local


【解决方案1】:

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

【讨论】:

  • 答案就是这么简单!我想为你 +1,但不幸的是,我今天的票数一空。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2010-12-27
    • 2013-02-12
    相关资源
    最近更新 更多