ConcurrentHashMap的size方法是弱一致性的,size大小可以认为是数量的一个估计。那为什么不使用原子变量保证强一致性呢?有以下两点原因:
- 并发场景下不应该依赖元素数量。因为即使是在调用size()的时候返回了准确元素数量,但是在你使用size的时候,元素数量就可能发生变化了。
- 使用原子变量会降低容器效率。虽然使用原子变量的效率低于synchrize,但仍然是一种锁机制,在高并发场景下有激烈的竞争,会影响到容器更新的效率。
最后,如果程序中需要依靠准确的数量,那可以封装一个currentHashMap,在外部控制数量和进行相关的判断。
网友评论