簡體   English   中英

並發訪問對HashSet的影響

[英]Effects of concurrent accesses on a HashSet

我遇到了一些陰暗的代碼,其中HashSet同時被幾個線程訪問和修改,我想知道它可能產生的影響,考慮到Javadoc只解釋了行為是“非確定性的”並發,非同步訪問。

具體來說,對remove(element)的調用是否可能返回true ,但是其他線程永遠不會看到調用的效果(即contains(element)將始終在其他線程中返回true )?

PS:只是為了讓你放心,我知道這段代碼很糟糕,我會用等效的同步集合替換HashSet

在多個線程中訪問HashSet可以。

  • 導致您不會被另一個線程看到的更改。
  • 使用ConcurrentModifcationException失敗的迭代器。
  • 一個線程進入HashSet代碼內的無限循環(很少但很糟糕)

注意:使用簡單的替代品

Set<Type> set = Collections.newSetFromMap(new ConcurrentHashMap<Type, Boolean>());

暫無
暫無

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

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