java并发相关

Java ConcurrentHashMap

2018-09-27  本文已影响5人  韭菜待收割

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大部分时间都避免了锁竞争。

上一篇下一篇

猜你喜欢

热点阅读