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