0
我有下面的代碼在後臺線程ConcurrentModificationException的在iterator.next()
private List<IStartAction> mActions = Collections.synchronizedList(new ArrayList<IStartAction>());
protected void removeNonApplicableActions() {
Iterator<IStartAction> iterator = mActions.iterator();
while (iterator.hasNext()) {
IStartAction action = iterator.next();
if (!action.isApplicable()) {
iterator.remove();
}
}
}
當我運行這個在主線程獲得ConcurrentModificationException的成iterator.next()。 這是怎麼回事?我使用線程安全的集合並通過迭代器移除項目。僅用於此線程的集合。
synchronized表示您可以在特定條件下修改多個線程中的列表(請參閱javadoc for synchronizedList()方法)。這是一個不同的問題,你正在同時迭代和刪除。請使用listIterator而不是普通的迭代器。使用listIterator()方法。 – Tomek
你能提供一個你的代碼的最小工作例子,以便我們能夠重現問題嗎? –
'ConcurrentModificationException'並不是_必須_表示您有多個線程正在修改您的列表,而是您正在同時遍歷列表並同時修改它。 –