亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

20行為什么會有線程安全問題

您好,我能夠明白set是所有線程共享的,是個臨界區。但是什么情況下會發生線程安全問題呢?

正在回答

4 回答

A和B同時調用了這個set方法B比A慢一點,但都是在調用這個方法

Aset值為3

Bset值為4

那么Aset的值就會就會被覆蓋,為Bset的值4,最終結果就是Aset的值丟失,線程不安全

2 回復 有任何疑惑可以回復我~
#1

qq_奧斯卡羅嚴塔爾_0

我認為不對 每一個 new 出來的對象 地址不同 所以即使 是臨界區也不會被覆蓋
2020-01-21 回復 有任何疑惑可以回復我~
#2

qq_蒙牛_0 回復 qq_奧斯卡羅嚴塔爾_0

我同意你的觀點,我做了實驗,把synthesized關鍵字去掉之后結果也是正確的,感覺視頻作者舉的例子不是很恰當。(或者有更高深的見解?請大佬指教)
2020-01-29 回復 有任何疑惑可以回復我~
#3

Eri1c

不準確,要A和B落入同一個solt的情況下,后set的值在并發下被先set的值所覆蓋才算非預期行為,而先set的被覆蓋是正確的行為
2020-02-06 回復 有任何疑惑可以回復我~

上面同學解釋很好了。? 大家看java文檔的時候, 會有線程安全的說明, 大部分數據結構都不是線程安全的。?

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

這里我也沒想明白。mate_j?說的我并不認同,ThreadLocal.withInitial的方法調用不應該是線程獨立的么?HashSet在這里只是add,沒有其他額外操作,多個線程只是操作先后問題(即使同時,這2個對象也可以被加進去吧,除非jvm這里能new出2個一樣的對象)。即時同時方法調用,也是方法同時進入2個線程棧,也可以將對應的元素加入到set.可以的話,還請講師答疑解惑。多線程這塊這些細節確實不好理解。

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

qq_依然很瀟灑_0

對,我感覺沒線程安全問題啊
2021-05-10 回復 有任何疑惑可以回復我~

我認為HashSet是底層是HashMap實現的,而HashMap不是線程安全的,HashMap是由數組+鏈表/紅黑樹。具體線程安全問題應該是A和B被放置在數組的同一個位置,B把A的值覆蓋了

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

舉報

0/150
提交
取消

20行為什么會有線程安全問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號