0

我知道这个类似的问题,但我的问题涉及 ThreadLocal 清理的特定情况。

为了在线程基础上维护状态,我将(未知)数量的 ThreadLocals 存储在静态向量中。有时,“贪婪”线程需要更多可用的 ThreadLocals,因此向量大小会增加。虽然在我的场景中使用 ThreadLocal.remove() 进行清理不是问题,但我想知道在贪婪线程死亡后是否有可能缩小 Vector 大小,或者它是否只会增长(或充其量保持不变) )。

澄清一下:我的理解是,对于任何给定的 ThreadLocal,每个线程都会存在不同的实例。那么,当从线程 A 访问它时,我的静态 Vector 怎么知道 ThreadLocal T 的值对于所有现有线程都是空的?

谢谢你的帮助

4

2 回答 2

1

请在此处查看官方文档: Vector.trimToSize()

或者:Vector.setSize()

于 2013-03-13T13:11:09.177 回答
0

你试图完成的任务是不合逻辑的。从当前线程中,您无法知道 ThreadLocal 是否被另一个线程使用以及有多少线程正在使用它。您可以尝试将 ThreadLocals 与 WeakHashMap(或 Guava 的缓存)结合使用,但这将是一个非常奇怪的解决方案,请尝试防止 ThreadLocals 的增长。

于 2013-03-13T13:58:59.857 回答