为了账号安全,请及时绑定邮箱和手机立即绑定

了解 CopyOnWriteArrayList 迭代器行为

了解 CopyOnWriteArrayList 迭代器行为

烙印99 2023-05-24 14:40:19
我正在学习CopyOnWriteArrayList,下面的情况让我思考。我的主要方法是这样的:public static void main(String[] args) {    List<String> list = new CopyOnWriteArrayList<String>();    list.add("Init1");    list.add("Init2");    list.add("Init3");    list.add("Init4");    for(String str : list){        System.out.println(str);        list.add("PostInit");    }   }在 javadoc 中我读到:内存一致性影响:与其他并发集合一样,在将对象放入 CopyOnWriteArrayList 之前线程中的操作发生在另一个线程中从 CopyOnWriteArrayList 访问或删除该元素之后的操作。我期待一个无限循环,因为“在将对象放入 CopyOnWriteArrayList 之前线程中的操作发生在访问或删除之后的操作之前”。但是我的控制台输出是:Init1Init2Init3Init4我相信,我在这里缺乏一些了解。有人可以帮忙吗?
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

从文档

“快照”样式的迭代器方法在创建迭代器时使用对数组状态的引用。这个数组在迭代器的生命周期内永远不会改变,所以干扰是不可能的,迭代器保证不会抛出 ConcurrentModificationException。迭代器不会反映自迭代器创建以来对列表的添加、删除或更改

for-each 循环使用迭代器

因此,for-each 循环将在 for 循环开始时打印列表中的元素,因为它是在创建迭代器的那一刻。


查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信