最近做的一個項目裏使用了多線程以及LinkedBlockingQueueh和LinkedBlockingDeque等類,在某線程裏有一個屬於線程實例的全局的HashMap,然後在run方法中會通過map的迭代器進行遍歷,然後會修改此Map的數據結構(即長度),然後發現會報ConcurrentModificationException的異常,如圖:
然後將此Map的初始化對象從HashMap改成ConcurrentHashMap就不會遇到此異常。
ConcurrentHashMap可以支持向map中添加新元素,而HashMap則拋出了ConcurrentModificationException