簡體   English   中英

並發HashMap線程安全和發生之前的關系

[英]Concurrent HashMap thread safety and happens-before relationship

ConcurrentHashMap尋找javadoc,我閱讀了下面的聲明,該聲明困擾着我關於所述集合的線程安全性。

來自: Class ConcurrentHashMap

檢索操作(包括get)通常不會阻塞,因此可能與更新操作(包括putremove )重疊。 檢索反映了最近完成的更新操作的結果。 對於諸如putAllclear類的聚合操作,並發檢索可能反映僅插入或刪除某些條目。

我發現這一段是自相矛盾的。 確切地說,聲明2說retreivals反映了最近完成的操作,而聲明3幾乎表示這種行為不能保證聚合函數。

這是否意味着像putAllclear這樣的聚合操作仍然是一個冒險的賭注?

這是否意味着像putAll和clear這樣的聚合操作仍然是一個冒險的賭注?

他們承諾“檢索操作......不阻止”對他們可以承諾的其他方面提出了一些主要限制。 例如, map.get(k)調用必須立即返回或者null或一些v這是較早put(k,v)與同k get(k)調用不能等待其他一些線程完成map.putAll(someEnormousOtherMap)調用。 他們承諾不會阻止!

基本上他們不能保留這個承諾,除非看似原子的唯一操作是單個鍵/值對的插入/刪除/替換。 在不破壞非阻塞get()承諾的情況下實現aggragate操作的唯一方法是將它們實現為對一次操作一個鍵/值對的原子基元的非原子序列調用。

暫無
暫無

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

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