【问题标题】:How to continue object from ThreadLocal in child thread?如何在子线程中从 ThreadLocal 继续对象?
【发布时间】:2011-09-13 17:59:24
【问题描述】:

我在 ThreadLocal 中传递了一个对象。 现在我当前的线程将创建新的子线程。 我希望来自 ThreadLocal 的对象也应该继续使用子线程。

有什么办法可以做到……?

提前谢谢你....

【问题讨论】:

  • 所以你想要一个 InheritableThreadLocal?

标签: java


【解决方案1】:

您需要的是InheritableThreadLocal。在创建子线程时,将 InheritableThreadLocal 从父线程(Java“按值调用”语义)传递给子线程。

【讨论】:

  • This answer 建议 InheritableThreadLocal 不适用于线程池,因为线程被重用。您对此有何看法?
  • 正确。如果使用线程池,则不能使用线程局部变量在父线程和子线程之间传递值。但这不是 >>this
  • 没错,这是一个非常重要的细微差别,但值得一提。尤其是如今 Java 8 的 Stream.parallel()
  • 小心InheritableThreadLocalstackoverflow.com/questions/41293485/…
  • [URGENT] 那么如何强制共享与父线程相同的 ThreadLocal,以便子线程完成的任何更新对父线程也可见?我们可以重写 childValue 方法以返回与父对象相同的包含对象以使其工作吗?
【解决方案2】:

您可以通过get() 方法从您的ThreadLocal 检索对象本身并将此引用传递给您的子线程。

如果您想与您的子线程共享它,请查看其他答案。

【讨论】:

  • 从技术上讲,可继承的线程局部变量是不共享的。每个子线程都有自己的线程局部变量...从父线程的局部变量初始化。
  • [URGENT] 那么如何强制共享与父线程相同的 ThreadLocal,以便子线程完成的任何更新对父线程也可见?我们可以重写 childValue 方法以返回与父对象相同的包含对象以使其工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2018-05-02
相关资源
最近更新 更多