-1

如何获得此代码块的 ConcurrentModificationException ?

synchronized (list) {
        for (Iterator<?> it = list.iterator(); it.hasNext(); ) {
            Object object = it.next();
            // do something to object without touching list
        }
}

编辑:对不起,这不够具体://对对象做一些事情不会触及列表

4

2 回答 2

7

例如,通过让另一个线程修改列表。

仅仅因为您同步此代码块并不意味着对列表的所有访问都被阻止。它只确保列表上同步的所有其他块不能并行执行。

如果列表由多个线程共享,则它的所有使用必须在同一个监视器上同步。

于 2012-04-19T13:29:26.817 回答
2

如果“做某事”直接或间接地添加或删除某些东西list(除了使用it.remove()或类似的方法),那么你会得到这个异常。在这种情况下,同步不会阻止它发生。

于 2012-04-19T13:27:07.170 回答