簡體   English   中英

Iterator.next()上的ConcurrentModificationException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM