我知道this類似的問題,但我的問題涉及到ThreadLocal清理的特定情況。Java中的ThreadLocal矢量清理
爲了在線程的基礎上維護狀態,我將一個(未知)數量的ThreadLocals存儲在一個靜態向量中。有時候一個「貪婪的」線程將需要更多的ThreadLocals可用,結果Vector大小將會增加。儘管使用ThreadLocal.remove()進行清理在我的場景中並不是問題,但我懷疑在貪婪線程死亡後它是否能縮小向量大小,或者它是否只能增長(或者至多保持不變)。
澄清:我的理解是,對於任何給定的ThreadLocal,每個線程都會存在一個不同的實例。那麼我的靜態Vector如何知道,當它從線程A被訪問時,ThreadLocal T的值對於所有現有的線程都是空的?
感謝您的幫助
嗨,謝謝。我意識到這一點,但我的問題不是如何去做,而是如果它完全有可能縮小這樣一個向量。 – 2013-03-13 13:15:09
@RaulBertone我從來沒有使用過這些,但是閱讀它看起來像調用'setSize()'後跟'trimToSize()'的文檔將會完全按照您的需要進行操作。 – Windle 2013-03-13 13:28:29
如果您安裝了一個漂亮的IDE,那麼CTRL +點擊該代碼非常容易。在那裏你會發現一個數組拷貝到一個更小的數組,所以這個矢量在內存佔用中真正減少了。 – Jan 2013-03-13 15:16:29