簡體   English   中英

在ThreadLocal中使用WeakHashMap是一個好主意嗎

[英]Is it a good idea to use WeakHashMap in ThreadLocal

對於我的用例,我必須傳遞來自應用程序不同層/組件的許多上下文信息。 由於很少有組件是離散的,因此我正在考慮使用ThreadLocal來存儲此類上下文信息。 在將響應寫回用戶之前,我有一個攔截器/過濾器可以清理它。 現在,我的問題是,在ThreadLocal使用WeakHashMap是一個好主意嗎(請參見下面的代碼片段)?


    private static final ThreadLocal<Map<String, Object>> context = new ThreadLocal<WeakHashMap<String, Object>>();

我心中的疑問(由於我對Java弱引用的了解有限)是,弱引用可以返回NULL(因為GC根據自己的意願收集了它們)。

請幫助我理解這一點。 我應該使用像HashMapConcurrentHashMap這樣的強引用,還是可以執行?

WeakHashMap的Javadoc指出:

該類主要用於與equals方法使用==運算符測試對象標識的鍵對象一起使用。 一旦丟棄了這樣的密鑰,就永遠無法重新創建它,因此以后無法在WeakHashMap中對該密鑰進行查找,並且會驚訝地發現它的條目已被刪除。 此類將與其equals方法不基於對象標識的鍵對象(例如String實例)完美配合。 但是,使用此類可重新創建的鍵對象,自動刪除其鍵已被丟棄的WeakHashMap條目可能會造成混亂。

因此,如果您不能容忍條目隨機消失,那么您實際上不應該將WeakHashMapString鍵一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM