簡體   English   中英

同步后的Java並發修改異常

[英]Java Concurrent Modification Exception after synchronizing

我有一個對象的LinkedList我正在嘗試迭代(使用迭代器),看它們是否有沖突,如果有,請將其從列表中刪除。 但是,我遇到了並發修改異常。 我將其放在同步塊中,並且我還嘗試在try catch塊中捕獲錯誤,但似乎都沒有幫助,代碼在這里:

private void updateTP() {
    synchronized (toiletpaper) {
        Iterator<ToiletPaper> iter = toiletpaper.iterator();
        while (iter.hasNext()) {
            ToiletPaper tp = iter.next();
            tp.update(1000, 700);
            if (toilet.overlaps(tp)) {
                System.out.println("tp splash!");
                toiletpaper.remove(tp);
                menu.removeLife();
            }
        }
    }
}

關於這個問題的任何想法都將不勝感激,我在這里和google中瀏覽了一下,他們所有人都說捕獲異常或同步異常,這似乎都不起作用,請幫助。

為避免異常,請改用iter.remove() 這將通過迭代器實例而不是當前調用刪除迭代器實例,該實例分別搜索並從列表中刪除-即並發修改。

引發異常是因為您直接使用toiletpaper.remove(tp);修改了集合toiletpaper.remove(tp); 在迭代集合時,必須使用iter.remove()修改集合。

當您執行toiletpaper.remove(tp)您修改了鏈表(您將其重新鏈接),因此會收到該錯誤; 您的迭代器不再有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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