我下面有一个代码段。我有两个线程A和B同时运行。
List<String> listPeople = new ArrayList<>();
// Add more item
.....
Thread A
for (String item : listPeople) {
System.out.println("Name is: " + item.name);
}
Thread B
- add/remove item to list people
使用这种形式的for循环,它通过List的
iterator
循环。那么ConcurrentModificationException
会崩溃吗? 最佳答案
从ConcurrentModificationException
Javadoc:
请注意,此异常并不总是表示对象已被其他线程同时修改。 [...]
请注意,不能保证快速故障行为,因为通常来说,在存在不同步的并发修改的情况下,不可能做出任何严格的保证。失败快速操作会尽最大努力抛出ConcurrentModificationException
。因此,编写依赖于此异常的程序的正确性是错误的:ConcurrentModificationException
仅应用于检测错误。