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

时间:2015-04-24 22:33:25

标签: java multithreading thread-local

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

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

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

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:4)

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

使用InheritableThreadLocal表示将值复制到任何子线程。

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