Is List.iterator() thread-safe?

后端 未结 3 763
误落风尘
误落风尘 2020-12-05 14:14

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

相关标签:
3条回答
  • 2020-12-05 14:49

    No iterator is thread-safe. If the underlying collection is changed amidst iteration, a ConcurrentModificationException is thrown.

    Even iterators of synchronized collections are not thread-safe - you have to synchronize manually.

    One exception is the CopyOnWriteArrayList, which holds a snapshot during iteration.

    0 讨论(0)
  • 2020-12-05 14:57

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

    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.

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

    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.

    0 讨论(0)
  • 2020-12-05 14:59

    It depends on what class you use,

    not for Collections.synchronizedList(new ArrayList<>()); reason but

    for CopyOnWriteArrayList reason.

    best Description here

    0 讨论(0)
提交回复
热议问题