![](/img/trans.png)
[英]ConcurrentModificationException in iterator.next()
[英]ConcurrentModificationException on Iterator.next()
我在以下代碼上收到ConcurrentModificationException:
private static List<Task> tasks = new LinkedList<Task>();
...
public void doTasks(){
synchronized(tasks){
Iterator<Task> it = tasks.iterator();
while(it.hasNext()){
Task t = it.next(); < Exception is always thrown on this line.
if(t.isDone()){
it.remove();
} else {
t.run();
}
}
}
}
...
public void addTask(Task t){
synchronized(tasks){
tasks.add(t);
}
}
...
public void clearTasks(){
synchronized(tasks){
tasks.clear();
}
}
對象“任務”不會在類中的任何其他位置使用。 我不知道為什么我會得到例外。 任何幫助將不勝感激。
這是你的問題:
if(t.isDone()){
...
} else {
t.run(); // probably changing the task, so consequently the list tasks
}
編輯:您無法更改循環中的tasks
列表。 查看ConcurrentModificationException
文檔以獲取更多詳細信息。
干杯!
發現了這個bug! 我忘記了在doTask()中運行任務的場景實際上可以調用addTask()。 但是我有點困惑,為什么會發生這種情況,因為我認為“任務”對象會被doTask()函數鎖定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.