Java ConcurrentSkipListMap的computeIfAbsent方法“自动应用一次”

时间:2019-07-13 22:34:03

标签: java concurrency

computeIfAbsent的{​​{1}}方法的Javadoc说:“仅当不存在该值时,不能保证该函数原子地应用一次。”有人可以向我解释“原子地应用一次”是什么意思吗?

ConcurrentSkipListMap中的computeIfAbsentConcurrentSkipListMap中的ConcurrentHashMap相比如何?

1 个答案:

答案 0 :(得分:0)

我的理解是,当ConcurrentSkipListMap检测到其他线程进行了并发修改时,有时必须在内部重做步骤。因此,传递给computeIfAbsent的函数可能会运行多次,因此它不会有任何副作用。

我看了看代码,发现有可能乐观地调用该函数,因此结果可能会被丢弃。