我有一个InheritableThreadLocal变量,我想传递给由EJB容器的线程池分配的另一个子线程,作为对公共EJB方法的异步调用的结果。启动异步调用的父调用者是一个无状态EJB的REST资源。 只有当创建子线程为新时,InheritableThreadLocal才会将值传递给其子线程。一旦在池中创建了一个线程,它就不会销毁线程,直到服务器被反弹为止。将ThreadLocal变量传递给EJB容器线程池
考虑到上述事实,我的情况的子线程来自EJB容器维护的线程池。只有在服务器启动后第一次调用Resource时,或者将在Threadpool中创建的全新线程分配为子线程时,InheritanceThreadLocal才会将值传递给其子线程。在所有其他情况下,我将获得第一次创建和分配线程时从池中分配给子线程的初始值。
我正在IBM WebSphere上运行我的代码,并且在异步调用中将ThreadLocal值作为方法参数传递不是选项。
我如何重新分配ThreadLocal值,以便每次运行我都可以获得分配给子线程的当前值?
我发现下面的链接有点类似,但对于我的情况,ThreadPool是EJB容器提供的。
Propagating ThreadLocal to a new Thread fetched from a ExecutorService
如果您没有得到答案,请允许我建议添加一些代码片段,以便阅读的人员更容易确保他们正确地遵循。 –