簡體   English   中英

ConcurrentNavigableMap,解釋弱一致的迭代器

[英]ConcurrentNavigableMap, interpretation of weakly consistent iterators

ConcurrentNavigableMapJavaDoc中 ,我對以下內容感到有點困惑:

視圖的迭代器是一個“弱一致”的迭代器,它永遠不會拋出ConcurrentModificationException,並保證遍歷構造迭代器時存在的元素,並且可能(但不保證)反映構造之后的任何修改。

在ConcurrentSkipListMap等接口的實現中,措辭似乎相同。

這意味着什么,它似乎是一個矛盾 - 要么它可以保證遍歷構造時存在的元素,要么它可能反映了構造后的修改?

更新:我基本上想知道是否在ConcurrentNavigableMaps上創建一個像ConcurrentSkipListMap的迭代器,創建一個地圖的“快照”視圖。

要回答我的問題,有一個由迭代器並發利益郵件列表上提供的一致性保證強度的討論在這里

ConcurrentHashMap和ConcurrentSkipListMap的作者Doug Lea 似乎同意保證完全沒有保證,並且在ConcurrentHashMap的情況下,迭代器可以報告映射處於從未實際存在的狀態。 。

對於那些好奇的人來說,ConcurrentSkipListMap的來源,特別是它的內部Iter(迭代器)類就在這里

ConcurrentSkipListMap中的迭代器迭代跳過列表中的常規節點,並使用易失性引用鏈接這些節點。 可能是這種有點令人困惑的JavaDoc語句實際上[簡單地]指的是先發生的保證。 即,在創建迭代器之前由其他線程進行的更改將僅對驅動迭代的線程可見。

措辭很奇怪,但實際上它意味着迭代器可能反映了構造迭代器后所做的一些更改,但並不能保證反映所有這些更改。 除了這些反映的變化之外,元素在構造時存在。

在實踐中,它(大致)表示由於弱一致的迭代器遍歷集合,它不能反映已經遍歷的集合部分的變化,而是反映尚未遍歷的集合部分的變化。

暫無
暫無

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

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