為什么threadLocalMap要設計為Static的雙層map,如果設計為非靜態(tài)的單層map有什么問題?
如下:
public?class?MyThreadLocal<T>?{ ????/** ?????*?key:?threadId;?value:存儲內(nèi)容 ?????*/ ????private?Map<Long,?T>?threadMap?=?new?HashMap<>(); ????public?void?set(T?data){ ????????long?threadId?=?Thread.currentThread().getId(); ????????threadMap.put(threadId,?data); ????} ????public?T?get(){ ????????long?threadId?=?Thread.currentThread().getId(); ????????if?(!threadMap.containsKey(threadId))?{ ????????????threadMap.put(threadId,?initialValue()); ????????} ????????return?threadMap.get(threadId); ????} ????protected?T?initialValue(){ ????????return?null; ????} }
我感覺這樣已經(jīng)完全能實現(xiàn)線程隔離的功能。
老師那種寫法,是因為JDK設計threadLocalMap屬于Thread的成員變量,所以才需要雙重Map嵌套。
我的理解正確嗎?如果正確的話,為什么JDK要這樣設計,而不用我的這種寫法?
2020-12-09
HashMap。本身就不是線程安全的,所以 你這個寫法 我暫時不確定 是不是能正確的運行?
但是既然不是線程安全的? 所以 我覺得 不可以這樣寫
如果你加個鎖 確實可以 變成安全的 操作
但是就會 變成多線程 競爭鎖? ?非常消耗性能
雖然實現(xiàn)了 類似功能 但是性能 太低?
所以JDK 不會這樣設計
2020-06-14
如果不是static,你怎么知道你存到哪里(哪個實例的變量里)了呢