我在下面有一个代码段。我有2个线程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
崩溃吗?
答案 0 :(得分:4)
来自ConcurrentModificationException
Javadoc:
请注意,此异常并不总是表示某个对象已被不同的线程同时修改。 [...]
请注意,无法保证快速失败的行为,因为一般来说,在存在不同步的并发修改时,无法做出任何硬性保证。快速失败的操作会尽最大努力抛出
ConcurrentModificationException
。因此,编写依赖于此异常的程序以确保其正确性是错误的:ConcurrentModificationException
应仅用于检测错误。