child 线程可以修改其 parent 的 Threadlocal 变量吗?

Can a child thread modify its parent's Threadlocal variable?

我有 2 个线程,每个线程都有一个名为 threadLocal 的线程本地列表,它们都将生成 child 个线程。我希望 child 线程能够修改 parent 的 threadLocal。

我尝试将 parent 本身传递给 child 以便它可以调用 parent.threadLocal.get().add(x) 但这会导致空指针异常。当 parent 调用 threadLocal.get().add(x) 时,它可以将 x 添加到列表中。

我知道问题出在 .add(x) 上,因为 child 只调用 .get() 不会导致异常。我还尝试将 threadLocal 本身传递给 child 并给出相同的错误。

有办法吗?

您可以在父项中检索列表并将其传递给子项,或者使用 InheritableThreadLocal

使用InheritableThreadLocal意味着值被复制到任何子线程。

请注意,在任何一种情况下,您都无法更改父级 ThreadLocal 变量的值,但可以改变该变量引用的对象。在您的情况下,只要您正确处理并发,例如在列表上调用 .add(...) 就可以正常工作,例如通过使用 CopyOnWriteArrayList