如何为此代码块获取ConcurrentModificationException?
synchronized (list) {
for (Iterator<?> it = list.iterator(); it.hasNext(); ) {
Object object = it.next();
// do something to object without touching list
}
}
编辑:对不起,这不够具体://对象做某事不触及列表
答案 0 :(得分:7)
例如,通过让另一个线程修改列表。
仅仅因为您同步此代码块并不意味着阻止了对列表的所有访问。它只确保列表上同步的所有其他块不能并行执行。
如果列表由多个线程共享,则所有其使用必须在同一台监视器上同步。
答案 1 :(得分:2)
如果“做某事”直接或间接地添加或删除list
中的内容(除非使用it.remove()
或类似内容),那么您将获得此异常。在这种情况下,同步不会阻止它发生。