循环中是否存在ConcurrentModificationException

时间:2016-07-25 03:50:47

标签: java for-loop

我在下面有一个代码段。我有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崩溃吗?

1 个答案:

答案 0 :(得分:4)

来自ConcurrentModificationException Javadoc

  

请注意,此异常并不总是表示某个对象已被不同的线程同时修改。 [...]

     

请注意,无法保证快速失败的行为,因为一般来说,在存在不同步的并发修改时,无法做出任何硬性保证。快速失败的操作会尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序以确保其正确性是错误的: ConcurrentModificationException应仅用于检测错误。