在我的Java项目中,我需要以多种方式使用TreeMap。我发现ConcurrentSkipListMap是我需要的,但是某些方法不是线程安全的。其中之一- containsKey(Object key)。以多种方式使用此方法的典型解决方案是什么?在我的程序中,我需要放置不会替换旧密钥的密钥,如果不可能的话,我将放置另一个密钥而不会获得唯一密钥。因为我不会丢失信息,所以应该使用哪种构造来代替containsKey?
如果您担心containsKey结果会过时,然后再对它们采取行动,或者担心javadoc中的此警告:
此外,不能保证批量操作putAll,equals,toArray,containsValue和clear是原子执行的。例如,与putAll操作同时运行的迭代器可能只查看一些添加的元素。
在ConcurrentSkipListMap上定义了一些方法,您可以改用这些方法。例如,请参见 putIfAbsent:
如果指定的键尚未与值关联,则将其与给定的值关联。这相当于
if (!map.containsKey(key)) return map.put(key, value); else return map.get(key);
除了动作是原子执行的。
另请参阅删除和替换方法。