Java 循环中是否存在ConcurrentModificationException

Java 循环中是否存在ConcurrentModificationException,java,for-loop,Java,For Loop,我在下面有一段代码。我有两个线程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 List lis

我在下面有一段代码。我有两个线程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
List listPeople=new ArrayList();
//添加更多项目
.....
穿过
for(字符串项:listPeople){
System.out.println(“名称为:“+item.Name”);
}
线程B
-添加/删除项目以列出人员
对于这种形式的for循环,它通过列表的迭代器进行循环。那么,它是否会与来自以下位置的
ConcurrentModificationException

崩溃:

请注意,此异常并不总是表示对象已被其他线程并发修改。[……]

请注意,fail fast行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下,不可能做出任何硬保证。Fail fast operations尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的正确性的程序是错误的:
ConcurrentModificationException
应仅用于检测错误

从:

请注意,此异常并不总是表示对象已被其他线程并发修改。[……]

请注意,fail fast行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下,不可能做出任何硬保证。Fail fast operations尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的正确性的程序是错误的:
ConcurrentModificationException
应仅用于检测错误


正如@Daniel Pryden在他的回答中解释的那样,你不能指望它。有时它可能抛出ConcurrentModificationException,有时则可能不会。谢谢您的回答。为了安全起见,我应该使用For(;;)语句,对吗?正如@Daniel Pryden在他的回答中解释的,你不能指望它。有时它可能抛出ConcurrentModificationException,有时则可能不会。谢谢您的回答。为了安全起见,我应该使用For(;;)语句,对吗?谢谢你的回答。为了安全起见,我应该使用For(;;)语句,对吗?@HuyDuongTu:不,为了安全起见,您应该避免跨线程共享集合,或者使用线程安全的实现。例如,您可以使用相同的监视器锁同步对
ArrayList
变量的所有访问。谢谢您的回答。为了安全起见,我应该使用For(;;)语句,对吗?@HuyDuongTu:不,为了安全起见,您应该避免跨线程共享集合,或者使用线程安全的实现。例如,可以使用相同的监视器锁同步
ArrayList
变量的所有访问。