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