以线程安全的方式更新Map <String,Set <String >>

时间:2019-08-26 22:32:31

标签: java thread-safety hashset concurrenthashmap

如果集合包含给定键的指定值,我想更新地图。如果不是,请更新该设置(如果该值可缓存)。

我的实现如下。它是线程安全的吗?


Map<String, Set<String>> cache = new ConcurrentHashMap<>();

// Only this method will change the map
boolean checkValue(String key, String value) {
        final Set<String> values = cache.get(key);
        if (values != null) {
            if (values.contains(value)) {
              return true;
            }
        }

        if (isCacheable(value)) {
            cache.computeIfAbsent(key,
                                  k -> Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>()))
                 .add(value);
            return true;
        }

        return false;
}

0 个答案:

没有答案