Java ConcurrentHashMap

1、ConcurrentHashMap

ConcurrentHashMap是线程安全的,比起HashTable性能高出很多;key和值都不能为null。
ConcurrentHashMap初始化时,Segment数组的默认大小ssize是16,HashEntry数组的大小为2的幂次方,默认大小也是2。

2、ConcurrentHashMap的实现原理

JDK1.7:

采用Segment + HashEntry的方式进行实现;采用分段锁的方式。每个Segment下都含有HashEntry数组,如果发生hash冲突则以链表的形式存在。

JDK1.8:

放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现,链表长度过长会变为红黑树。

3、ConcurrentHashMap的高并发性来源

JDK1.7:

1)采用分离锁减小了请求同一个锁的频率和时间
2)用 final HashEntery 对象的不变性来避免读操作加锁的需求。
3)Volatile变量来保证内存可见性。

JDK1.8:

CAS大部分时间都避免了锁竞争。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容