當前位置:知知館 >

數碼 >數碼極客 >

hashmap為什麼是線程不安全的

hashmap為什麼是線程不安全的

hashmap為什麼是線程不安全的

演示機型:華為MateBook X系統版本:win10

1、JDK1.7中,由於多線程對HashMap進行擴容,調用了HashMap,當某個線程執行過程中,被掛起,其他線程已經完成數據遷移,等CPU資源釋放後被掛起的線程重新執行之前的邏輯,數據已經被改變,造成死循環、數據丟失。

2、JDK1.8 中,由於多線程對HashMap進行put操作,調用了HashMap,假設兩個線程A、B都在進行put操作,並且hash函數計算出的插入下標是相同的,當線程A執行完第六行代碼後由於時間片耗盡導致被掛起,而線程B得到時間片後在該下標處插入了元素,完成了正常的插入,然後線程A獲得時間片,由於之前已經進行了hash碰撞的判斷,所有此時不會再進行判斷,而是直接進行插入,這就導致了線程B插入的數據被線程A覆蓋了,從而線程不安全。

標籤: HashMap 線程
  • 文章版權屬於文章作者所有,轉載請註明 https://zhizhiguan.com/zh-mo/sm/x31og1.html