使用Synchronized 時出現ConcurrentModificationException
儘管同步了getAnotherX 方法,但在調用異常.nceptationd 時仍會遇到異常。 。要理解為什麼會發生這種情況,理解 ConcurrentModificationException 的本質至關重要。
ConcurrentModificationException 的本質
與它的名稱相反,ConcurrentModificationException 主要並不是由多執行緒引起的。當修改迭代循環中正在迭代的集合時,通常會發生這種情況。以下是範例:
Iterator iterator = collection.iterator(); while (iterator.hasNext()) { Item item = (Item) iterator.next(); if (item.satisfiesCondition()) { collection.remove(item); } }
在這種情況下,使用 iterator.remove() 而不是 collection.remove(item) 是必不可少的。新增到集合時也會出現此異常。不幸的是,這種情況沒有通用的解決方案。但是,如果您正在處理 List,則可以使用 ListIterator,它有一個 add() 方法。
以上是為什麼即使使用 Synchronized 也會出現 ConcurrentModificationException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!