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