- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我原来的 SO question 的跟进问题.
感谢这个问题的答案,根据 ConcurrentMap.computeIfPresent
javadoc 看起来是这样的
The default implementation may retry these steps when multiple threads attempt updates including potentially calling the remapping function multiple times.
我的问题是:
ConcurrentHashMap.computeIfPresent
仅在多个线程之间共享时会多次调用 remappingFunction
还是在从单个线程创建和传递时也可以多次调用?
如果是后一种情况,为什么它会被调用多次而不是一次?
最佳答案
接口(interface)方法的总契约 ConcurrentMap.computeIfPresent
允许实现在发生争用的情况下重复评估,这正是 ConcurrentMap
继承 default
方法时发生的情况,因为不可能在通用 之上提供原子性
接口(interface)。default
方法中的 >ConcurrentMap
但是,实现类 ConcurrentHashMap
覆盖了这个方法并在its documentation 中提供了保证。 :
If the value for the specified key is present, attempts to compute a new mapping given the key and its current mapped value. The entire method invocation is performed atomically. Some attempted update operations on this map by other threads may be blocked while computation is in progress, so the computation should be short and simple, and must not attempt to update any other mappings of this map.
强调我的
因此,由于您的问题具体要求 ConcurrentHashMap.computeIfPresent
,因此答案是,它的参数函数永远不会被多次求值。这不同于,例如ConcurrentSkipListMap.computeIfPresent
函数可能会被计算多次。
关于java - 在 ConcurrentHashMap.computeIfPresent 中执行 `remappingFunction`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628649/
这是我原来的 SO question 的跟进问题. 感谢这个问题的答案,根据 ConcurrentMap.computeIfPresent javadoc 看起来是这样的 The default im
我是一名优秀的程序员,十分优秀!