java:列出线程本地?

Lan*_*uhn 14 java multithreading

有没有办法列出绑定到线程的TheadLocals?理想情况下,我可以访问Thread.threadLocals映射,但它受包保护.

我需要这个的原因是我需要检查线程,因为它们被返回到线程池以确保已正确清理ThreadLocals.也许有另一种方法可以做到这一点?

jar*_*ski 11

列表ThreadLocalsClearing ThreadLocals可以通过使用reflection(和setAccessible()标志)来覆盖JVM的常用权限来完成.出于显而易见的原因,当所有安全机制到位时,这不可用.


dan*_*ben 2

您可以使用afterExecute线程池的方法来执行任何清理(重新初始化?),只要您知道要清理哪些变量即可。

否则,您可以使用反射 - 从线程内部,迭代您感兴趣的类的声明字段,并且对于每个类型为 ThreadLocal 实例的字段,set它都位于initialValue您关心的对象上。