Java ConcurrentModificationException通过列表、同步和使用迭代器进行迭代

Java ConcurrentModificationException通过列表、同步和使用迭代器进行迭代,java,concurrency,synchronization,iterator,Java,Concurrency,Synchronization,Iterator,如何获取此代码块的ConcurrentModificationException synchronized (list) { for (Iterator<?> it = list.iterator(); it.hasNext(); ) { Object object = it.next(); // do something to object without touching list } } 编辑:抱

如何获取此代码块的ConcurrentModificationException

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

编辑:抱歉,这不够具体://do something to object不接触列表

如果do something直接或间接地从列表中添加或删除某个内容,而不是使用它。删除或类似操作,则会出现此异常。在这种情况下,同步不会阻止它的发生。

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

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


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

列表是实际列表还是包装器?如果它是一个包装器,锁本身就不会在支持列表上。+1很好,但它是一个实际的列表,没有包装器。每个循环都有一个包装器会更简单。你应该添加,除非使用它。删除等。。