小编典典

Java中不是CuncurrentSkipListMap的线程安全方法

java

在我的Java项目中,我需要以多种方式使用TreeMap。我发现ConcurrentSkipListMap是我需要的,但是某些方法不是线程安全的。其中之一-
containsKey(Object
key)。以多种方式使用此方法的典型解决方案是什么?在我的程序中,我需要放置不会替换旧密钥的密钥,如果不可能的话,我将放置另一个密钥而不会获得唯一密钥。因为我不会丢失信息,所以应该使用哪种构造来代替containsKey?


阅读 266

收藏
2020-11-26

共1个答案

小编典典

如果您担心containsKey结果会过时,然后再对它们采取行动,或者担心javadoc中的此警告

此外,不能保证批量操作putAll,equals,toArray,containsValue和clear是原子执行的。例如,与putAll操作同时运行的迭代器可能只查看一些添加的元素。

在ConcurrentSkipListMap上定义了一些方法,您可以改用这些方法。例如,请参见
putIfAbsent

如果指定的键尚未与值关联,则将其与给定的值关联。这相当于

if (!map.containsKey(key))
    return map.put(key, value);
else
    return map.get(key);

除了动作是原子执行的。

另请参阅删除和替换方法。

2020-11-26