我有2个线程,每个线程都有一个名为threadLocal的Threadlocal列表,它们都会产生子线程。我希望子线程能够修改父线程的threadLocal。
我已经尝试将父本身传递给子节点,以便它可以调用parent.threadLocal.get()。add(x)但这会导致空指针异常。当父调用threadLocal.get()。add(x)时,它能够将x添加到列表中。
我知道问题出在.add(x)上,因为让孩子只调用.get()不会导致异常。我也尝试将threadLocal本身传递给子进程,并给出了同样的错误。
有办法做到这一点吗?
答案 0 :(得分:4)
您可以检索父级中的列表并将其传递给孩子,或使用InheritableThreadLocal。
使用InheritableThreadLocal
表示将值复制到任何子线程。
请注意,在任何一种情况下,您都无法更改父级ThreadLocal变量的值,但您可以改变变量引用的对象。在你的情况下,只要你正确地处理并发,例如,在列表上调用.add(...)
就可以了。使用CopyOnWriteArrayList