問題描述
在 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() 是線程安全的嗎?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!