課程
/后端開發
/Java
/ThreadLocal
您好,我能夠明白set是所有線程共享的,是個臨界區。但是什么情況下會發生線程安全問題呢?
2020-01-19
源自:ThreadLocal 2-5
正在回答
A和B同時調用了這個set方法B比A慢一點,但都是在調用這個方法
Aset值為3
Bset值為4
那么Aset的值就會就會被覆蓋,為Bset的值4,最終結果就是Aset的值丟失,線程不安全
qq_奧斯卡羅嚴塔爾_0
qq_蒙牛_0 回復 qq_奧斯卡羅嚴塔爾_0
Eri1c
上面同學解釋很好了。? 大家看java文檔的時候, 會有線程安全的說明, 大部分數據結構都不是線程安全的。?
這里我也沒想明白。mate_j?說的我并不認同,ThreadLocal.withInitial的方法調用不應該是線程獨立的么?HashSet在這里只是add,沒有其他額外操作,多個線程只是操作先后問題(即使同時,這2個對象也可以被加進去吧,除非jvm這里能new出2個一樣的對象)。即時同時方法調用,也是方法同時進入2個線程棧,也可以將對應的元素加入到set.可以的話,還請講師答疑解惑。多線程這塊這些細節確實不好理解。
qq_依然很瀟灑_0
我認為HashSet是底層是HashMap實現的,而HashMap不是線程安全的,HashMap是由數組+鏈表/紅黑樹。具體線程安全問題應該是A和B被放置在數組的同一個位置,B把A的值覆蓋了
舉報
設計者視角源碼級ThreadLocal分析教你建立線程安全感-你專屬的技術優越感
1 回答為什么最后測試10000個請求,100個線程執行結果是10000,而200個線程執行結果是20000?
1 回答請問老師是否有其他更加系統全面的教程
2 回答為什么threadLocalMap要設計為Static的雙層map,如果設計為非靜態的單層map有什么問題?
2 回答為什么說“程序寫出來是用來閱讀的,偶爾用來執行”呢?
1 回答請問addSet這個臨界區代碼不加鎖會出現什么問題那
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2020-01-19
A和B同時調用了這個set方法B比A慢一點,但都是在調用這個方法
Aset值為3
Bset值為4
那么Aset的值就會就會被覆蓋,為Bset的值4,最終結果就是Aset的值丟失,線程不安全
2020-01-24
上面同學解釋很好了。? 大家看java文檔的時候, 會有線程安全的說明, 大部分數據結構都不是線程安全的。?
2020-11-19
這里我也沒想明白。mate_j?說的我并不認同,ThreadLocal.withInitial的方法調用不應該是線程獨立的么?HashSet在這里只是add,沒有其他額外操作,多個線程只是操作先后問題(即使同時,這2個對象也可以被加進去吧,除非jvm這里能new出2個一樣的對象)。即時同時方法調用,也是方法同時進入2個線程棧,也可以將對應的元素加入到set.可以的話,還請講師答疑解惑。多線程這塊這些細節確實不好理解。
2020-02-26
我認為HashSet是底層是HashMap實現的,而HashMap不是線程安全的,HashMap是由數組+鏈表/紅黑樹。具體線程安全問題應該是A和B被放置在數組的同一個位置,B把A的值覆蓋了