簡體   English   中英

並發數據結構中非並發數據結構的線程安全

[英]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.

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