SyncWriteMap为什么不直接用ConcurrentHashMap

分析Enjoy码时,看到kit中有SyncWriteMap,里面所有的方法都粗暴的使用了synchronized关键字。为什么不直接使用线程安全的ConcurrentHashMap?是因为ConcurrentHashMap的性能更差么?

@JFinal

评论区

JFinal

2020-12-30 17:03

用到 SyncWriteMap 的地方本质是并不在乎并发的,因为里头的数据本身就可以共享

为啥要用 SyncWriteMap,这个在头部的注释中已经说明:
SyncWriteMap 同步写 HashMap。创建原因是 HashMap扩容时,遇到并发修改可能造成 100% CPU 占用

JFinal

2020-12-30 17:04

说白了是有部分 JDK 版本的 HashMap 扩容时有 bug

ConcurrentHashMap 的性能当然不错,但肯定不如 HashMap

补充一下,你谈到了 SyncWriteMap 里面很多的 synchronized,这个不打紧,因为用到 SyncWriteMap 的场景多数只是在初始化的时候写入数据,后面就全都是读数据了,所以使用 synchronized 是没关系的

糊搞

2020-12-31 11:08

@JFinal 多谢解惑

热门反馈

扫码入社