ConcurrentHashMap 中的 Treemap 线程安全吗?

Twa*_*ood 1 java concurrency thread-safety concurrenthashmap treemap

我有一个嵌套地图的案例,如下所示:

private final static Map<String, TreeMap<Long,String>> outerConcurrentMap = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

我知道这ConcurrentHashMap是线程安全的,但我想知道TreeMap这个 CHM 持有的 s ,它们在 CHM 内部也是线程安全的吗?

我正在做的操作是:

  1. 如果未找到特定键 --> 创建新的 TreeMap 并针对键放置。
  2. 如果找到 key,则获取 TreeMap,并更新它。
  3. get(K)使用.从 CHM 检索 TreeMap
  4. 使用方法从 TreeMap 检索数据tailMap(K,boolean)
  5. clear()CHM。

在这种情况下我想要一个线程安全的结构。上述实现是否线程安全?如果没有,请提出解决方案。

ass*_*ias 7

一旦完成,TreeMap<?, ?> tm = chm.get(key);您就不再处于线程安全区域了。特别是,如果另一个线程更新树状图(通过或不通过 CHM),您可能会也可能不会看到更改。更糟糕的是,您所拥有的地图副本tm可能已损坏......

一种选择是使用线程安全映射,例如 ConcurrentSkipListMap。