[英]Thread-safety of a non-concurrent data structure in a concurrent data structure
我在Java中有一個像這樣的數據結構:
ConcurrentHashMap<String, Set<String>> objects;
Set(HashSet)不是並發數據結構。
多個線程可以安全地更改ConcurrentHashMap,但是其中的Set呢? Map中的Set對象是否是線程安全的? 還是ConcurrentHashMap僅為其自身提供線程安全性?
謝謝
在Map中Set
對象不是線程安全的 。 Map並不僅僅因為包含對集合的引用就使它成為線程安全的。
ConcurrentHashMap
實現僅為其自身的操作(例如放置,檢索,刪除,內容檢查等)提供線程安全。
如果發生這樣的情況,即同一Set
被多個線程同時修改,則這些修改的結果是不可預測的。
如果需要同步Set
對象,則可以考慮為ConcurrentHashMap使用Set包裝器:
Set<String> set = ConcurrentHashMap.newKeySet();
或者,簡單地:
Set<String> set = ...;
set = Collections.synchronizedSet(set);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.