2 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊
安全
ConcurrentModificationException
嗎?
它是安全的ConcurrentModificationException
。該異常僅由使用傳統(tǒng)迭代器或拆分器迭代(在某種意義上)地圖或其視圖之一的方法拋出。
但是,由于HashMap
它不是線程安全的類,如果在沒有適當(dāng)外部外部同步的情況下從多個線程使用它,可能會發(fā)生不好的事情。這些包括(按不良程度增加的順序)
size()
報告錯誤值的方法。條目神秘地暫時或永久消失。
可能的 NPE 和其他未經(jīng)檢查的異常。
由于多個線程在哈希鏈中創(chuàng)建循環(huán)的不幸操作序列,可能導(dǎo)致無限循環(huán)。
您的示例代碼不安全……但您不會得到“快速失敗” ConcurrentModificationException
。相反,您可能會在難以重現(xiàn)的“隨機”時間出現(xiàn)莫名其妙的錯誤。

TA貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊
如果多個線程在 a上執(zhí)行get
, put
&remove
操作HashMap
,沒有適當(dāng)?shù)耐剑恍┎缓玫氖虑?,比?size() 報告丟失/丟失的條目,意外的 NPE ......甚至可能會發(fā)生無限循環(huán)。
HashMap文檔說 -
請注意,此實現(xiàn)不是同步的。如果多個線程并發(fā)訪問一個散列映射,并且至少有一個線程在結(jié)構(gòu)上修改了映射,則必須在外部進(jìn)行同步。(結(jié)構(gòu)修改是添加或刪除一個或多個映射的任何操作;僅更改與實例已包含的鍵關(guān)聯(lián)的值不是結(jié)構(gòu)修改。)...
謝謝斯蒂芬。
添加回答
舉報