1 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
來自Javadoc:
當(dāng)?shù)淙魏渭弦晥D時(shí),用戶必須在返回的地圖上手動(dòng)同步:
Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized (m) { // Synchronizing on m, not s!
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
不遵循此建議可能會(huì)導(dǎo)致不確定的行為。如果指定的映射是可序列化的,則返回的映射將是可序列化的。
您可以使用ConcurrentHashMapwhich 保證并發(fā)keySet。見這里:
視圖的迭代器是一個(gè)“弱一致”的迭代器,它永遠(yuǎn)不會(huì)拋出 ConcurrentModificationException,并保證在構(gòu)造迭代器時(shí)遍歷元素,并且可以(但不保證)反映構(gòu)造后的任何修改。
添加回答
舉報(bào)