簡體   English   中英

多個線程在單個集合上使用iterator.remove()返回失敗快速迭代器

[英]Multiple threads using iterator.remove() on a single collection returning fail-fast iterator

甲骨文

注意,Iterator.remove是在迭代過程中修改集合的唯一安全方法。 如果在進行迭代時以任何其他方式修改了基礎集合,則行為未指定。

難道這意味着,即使多個線程在迭代一起同一個集合的故障快速實現的( VectorHashmapArrayListHashSet )對象進行iterator.remove()就沒有ConcurrentModificationException拋出?

不。這告訴您,在迭代時(在一個線程中)刪除元素的唯一安全方法是使用iterator.remove。 而且,如果從其他線程訪問(迭代或修改了)集合-有時您將獲得異常,有時則不會-通常情況下,行為不是確定性的,因此應避免使用它或依賴它。

話雖如此-唯一的例外是並發集合。

這並不意味着多線程可以使用iterator.remove()刪除數據。

如果要實現它,則需要使用同步類型的集合。 即使在那種情況下,您也不應嘗試在兩個線程中使用相同的迭代器。 如果您有兩個需要刪除條目的線程,則它們每個都應具有自己的迭代器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM