是List.iterator()线程安全吗? [英] Is List.iterator() thread-safe?

查看:366
本文介绍了是List.iterator()线程安全吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Java中: List.iterator()线程安全,即返回的迭代器反映任何时候的列表的当前状态,

In Java: Is List.iterator() thread-safe, i.e. does the returned iterator reflect the current state of the list at any time or just the state of the list at the time of its creation?

推荐答案

List.iterator()的行为没有定义或与不同的List实现一致。

The behaviour of List.iterator() is not defined or consistent with different List implementations.

对于ArrayList,LinkedList,如果在迭代它时修改列表,您可能会得到ConcurrentModificationException。 (这不能保证)避免这个问题的方法是使用一个synchronizedList()并在迭代它时锁定列表。

For ArrayList, LinkedList, you can get a ConcurrentModificationException if the list is modified when you are iterating over it. (This is not guaranteed) The way to avoid this issue is to use a synchronizedList() and lock the list while iterating over it.

对于Vector,集合是同步的,但是迭代器不是线程安全的。

For Vector, the collection is synchronized, but the iterator is not thread safe.

对于CopyOnWriteArrayList,你在调用iterator()时获取列表中的元素的快照,这个迭代器是线程安全,并且您不需要使用任何锁定。注意:元素的内容可以更改。

For CopyOnWriteArrayList, you get a snapshot of the elements in the list at the time you call iterator(), This iterator is thread safe, and you don't need to use any locking. Note: the contents of the elements can change.

这篇关于是List.iterator()线程安全吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆