課程
/后端開發
/Java
/ThreadLocal
set.add(v)每個線程只是初始化的時候才會調用,調用的時候,誰搶占到set這個變量,添加值的時候,不都是值等于0的這個對象v嗎
2020-02-14
源自:ThreadLocal 2-5
正在回答
這個HashSet和HashMap的多線程調用時是一樣的風險,在擴容時有可能導致死循環,所以要用同步的容器或者同步代碼塊去調用“添加”的方法
我同意樓主的看法,加鎖與否不影響該問題的結果。可能老師想表達的意思是,set作為臨界資源,加鎖更好,便于以后代碼的修改吧。
這里我測試不加鎖1000個線程跑100000也是正常的
多個線程初始化的時候會可能會產生多個線程同時調用set.add(v);? 對set有操作
舉報
設計者視角源碼級ThreadLocal分析教你建立線程安全感-你專屬的技術優越感
1 回答請問addSet這個臨界區代碼不加鎖會出現什么問題那
2 回答將v值設置為0,又放到set中去,那么set中的值不都是0?
3 回答Integer為什么不是引用類型呢?
2 回答為什么threadLocalMap要設計為Static的雙層map,如果設計為非靜態的單層map有什么問題?
2 回答為什么說“程序寫出來是用來閱讀的,偶爾用來執行”呢?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2020-04-13
這個HashSet和HashMap的多線程調用時是一樣的風險,在擴容時有可能導致死循環,所以要用同步的容器或者同步代碼塊去調用“添加”的方法
2020-03-25
我同意樓主的看法,加鎖與否不影響該問題的結果。可能老師想表達的意思是,set作為臨界資源,加鎖更好,便于以后代碼的修改吧。
2020-02-27
這里我測試不加鎖1000個線程跑100000也是正常的
2020-02-14
多個線程初始化的時候會可能會產生多個線程同時調用set.add(v);? 對set有操作