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

Cra*_*ito 4 java multithreading thread-local

我有 2 个线程,每个线程都有一个名为 threadLocal 的 Threadlocal 列表,它们都将产生子线程。我希望子线程能够修改父线程的 threadLocal。

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

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

有没有办法做到这一点?

Cup*_*Tae 5

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

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

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