子线程可以修改其父线程的 Threadlocal 变量吗?



我有 2 个线程,每个线程都有一个名为 threadLocal 的 ThreadLocal 列表,这两个列表都会生成子线程。我希望子线程能够修改父线程的 threadLocal。

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

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

有没有办法做到这一点?

您可以在父级中检索列表并将其传递给子级,也可以使用 InheritableThreadLocal。

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

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

相关内容

最新更新