首頁 >Java >java教程 >為什麼即使使用 Synchronized 也會出現 ConcurrentModificationException?

為什麼即使使用 Synchronized 也會出現 ConcurrentModificationException?

Barbara Streisand
Barbara Streisand原創
2024-11-06 01:35:02661瀏覽

Why Do I Get a ConcurrentModificationException Even When Using Synchronized?

使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn