[英]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根據自己的意願收集了它們)。
請幫助我理解這一點。 我應該使用像HashMap
或ConcurrentHashMap
這樣的強引用,還是可以執行?
WeakHashMap
的Javadoc指出:
該類主要用於與equals方法使用==運算符測試對象標識的鍵對象一起使用。 一旦丟棄了這樣的密鑰,就永遠無法重新創建它,因此以后無法在WeakHashMap中對該密鑰進行查找,並且會驚訝地發現它的條目已被刪除。 此類將與其equals方法不基於對象標識的鍵對象(例如String實例)完美配合。 但是,使用此類可重新創建的鍵對象,自動刪除其鍵已被丟棄的WeakHashMap條目可能會造成混亂。
因此,如果您不能容忍條目隨機消失,那么您實際上不應該將WeakHashMap
與String
鍵一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.