【问题标题】:Can child's ThreadLocal be modified with the parent's ThreadLocal value?可以用父级的 ThreadLocal 值修改子级的 ThreadLocal 吗?
【发布时间】:2013-05-07 07:46:17
【问题描述】:

我正在使用InheritableThreadLocal,我知道在创建子线程时ThreadLocal 将具有与父线程值相同的默认值。但是,当父级的 ThreadLocal 值被修改时,我该如何维护呢?

有没有办法在修改父级的ThreadLocal 时,他的所有子线程都收到该修改?

编辑:我的父线程中有一个布尔值设置为 false。但是我有一个条件,当这种情况发生时,我将布尔值设置为 true,我还需要对我的初始线程产生的所有子线程执行此操作。

【问题讨论】:

  • 你能在这里发布一些代码吗?我不知道你想达到什么目的。
  • 可继承的ThreadLocal是什么意思?每个线程都有自己对 ThreadLocal 对象中的变量的引用。线程是否从另一个线程产生并不重要。 “子”线程不继承 ThreadLocal 变量。
  • 我使用的是InheritableThreadLocal,这样子线程会继承父线程的值。

标签: java multithreading thread-local


【解决方案1】:

InheritableThreadLocal 仅有助于在子项中设置初始值。它不提供任何其他同步。您必须使用正常的线程同步方法来传播该值。

也就是说,如果您希望所有子项在开始时和父项更改时都具有相同的父项值,那么您为什么要给他们所有需要同步的单独对象?为什么不给孩子一个对父母的引用,让他们都检查父母的价值呢?

【讨论】:

    【解决方案2】:

    我正在使用可继承的ThreadLocal,我知道在创建子线程时,ThreadLocal 的默认值将与父线程值相同。

    如果它是继承的,它就是同一个对象。一切都一样。

    但是当父级的 ThreadLocal 值修改时,我该如何维护呢?

    维护什么?这里只有一个 ThreadLocal 对象。然而它的表现就是它的表现。

    【讨论】:

    • 通过维护我指的是保持从父线程本地到子线程本地的相同值,即使父线程本地值发生了变化。据我所知,一旦子线程是用父threadLocal值创建的,它们就不是同一个对象(父threadLocal值和子threadLocal值)
    • 这没有多大意义。如果ThreadLocal 被继承,则只有其中之一。没有“父母”和“孩子”。
    • 但是,既然有人友好地编辑了您的问题,现在很明显您正在使用InheritableThreadLocal;但我在这里没有看到 Javadoc 中没有回答的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2013-04-21
    • 2012-04-23
    相关资源
    最近更新 更多