gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:18 26 4
gpt4 key购买 nike

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

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

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

有没有办法做到这一点?

最佳答案

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

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

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

关于java - 子线程可以修改其父线程的 Threadlocal 变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29858633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com