使用同步方法時避免ConcurrentModificationException
ConcurrentModificationException 錯誤通常是由於對迭代器在循環內迭代的集合進行的修改而發生的身體。儘管方法聲明中存在synchronized關鍵字,但仍會遇到此異常。
在提供的程式碼片段:
public synchronized X getAnotherX(){ if(iterator.hasNext()){ X b = iterator.next(); String name = b.getInputFileName(); ... return b; } else{return null;} }
該錯誤可能會拋出,因為外部執行緒正在修改底層集合,而迭代器正在迭代它。這種修改可以包括新增或刪除元素。
此問題的解決方案是確保在迭代期間沒有其他線程可以修改集合。這可以透過在迭代集合之前創建集合的副本來實現。但是,如果這不可行,則必須以線程安全的方式取得迭代器。這可以透過使用 Collections.synchronizedList() 方法或透過為集合建立自訂同步包裝器來完成。
透過執行這些步驟,您可以確保不會遇到 ConcurrentModificationException 並且迭代集合安全結束。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3