【发布时间】:2011-11-07 18:18:48
【问题描述】:
我正在使用 ExecutorService 和 Future(示例代码 here)在一个超时的单独线程中运行一个进程(线程“生成”发生在 AOP 方面)。
现在,主线程是一个Resteasy 请求。 Resteasy 使用一个或多个 ThreadLocal 变量来存储一些我需要在我的 Rest 方法调用中检索的上下文信息。问题是,由于 Resteasy 线程在新线程中运行,ThreadLocal 变量丢失了。
将 Resteasy 使用的任何 ThreadLocal 变量“传播”到新线程的最佳方法是什么?似乎 Resteasy 使用多个 ThreadLocal 变量来跟踪上下文信息,我想“盲目地”将所有信息转移到新线程。
我查看了ThreadPoolExecutor 的子类化并使用beforeExecute 方法将当前线程传递给池,但我找不到将 ThreadLocal 变量传递给池的方法。
有什么建议吗?
谢谢
【问题讨论】:
-
第二段可以稍微改写一下吗?这让我很困惑。另外, beforeExecute 有什么问题?您无法使其正常工作,或者您意识到它无法满足您的需求?
标签: java multithreading threadpool resteasy thread-local