第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么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要這樣設計,而不用我的這種寫法?


正在回答

2 回答

HashMap。本身就不是線程安全的,所以 你這個寫法 我暫時不確定 是不是能正確的運行?

但是既然不是線程安全的? 所以 我覺得 不可以這樣寫

如果你加個鎖 確實可以 變成安全的 操作

但是就會 變成多線程 競爭鎖? ?非常消耗性能

雖然實現(xiàn)了 類似功能 但是性能 太低?

所以JDK 不會這樣設計

0 回復 有任何疑惑可以回復我~

如果不是static,你怎么知道你存到哪里(哪個實例的變量里)了呢

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么threadLocalMap要設計為Static的雙層map,如果設計為非靜態(tài)的單層map有什么問題?

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號