【发布时间】:2013-08-08 14:45:19
【问题描述】:
我看过下面的问题。答案是改用信号量。这没有回答我面临的问题中所述的其他问题之一。
我有一个父线程,它为 InhertiedThreadLocal 中的每个新请求设置一些唯一标识符,并向 ThreadPool 提交 2 个可运行任务,即 2 个线程。 对于初始请求,在父线程中为 InheritedThreadLocal 设置的值会正确传播到 ChildThread。 对于接下来的请求,子线程没有接收到父线程设置的最新的 InheritedThreadLocal,而是使用了 ChildThread 中的旧值。
这是因为线程池重用线程,而 InheritedThreadLocal 仅在创建新线程时才被复制。
现在如何在线程池场景中将 InheritedThreadLocal 的最新值从父线程传播到子线程。 有没有办法解决这个问题?
【问题讨论】:
-
我尝试了谷歌搜索,但如果可以解决,找不到具体的答案。
-
我也面临同样的问题。你最后找到解决方法了吗?如果是,请将其添加为答案。
-
@rahulmohan 不知何故,我们没有继续执行上述要求,因此我们没有进一步尝试。stackoverflow.com/a/7297494/745018 如果它对您有帮助,请检查。
-
重点是只有在创建子线程时,父线程的线程局部值才会传递给子线程。一旦这个子线程在初始执行后返回池中或从那里执行多次,它无法访问父线程上下文。
标签: java threadpool thread-local inherited