ConcurrentHashMap实现原理
1.7 和1.8 的区别
ConcurrentHashMap的话,要分为两种分情况去进行分析,一个是在jdk1.7,然后就是1.8之后,他们的这个差别还是蛮大的。
1.7的话,底层是数组加链表实现的,然后呢,使用了分段锁来保证线程安全,它是将数组分成了16段,也就是,给每个Segment来配一把锁,然后在读每个Segment的时候就要先获取对应的锁,所以呢,它是最多能有16个线程并发去操作。
到了jdk1.8之后,它跟hashmap一样,使用了链表加红黑树,同时在并发处理方面不再使用分段锁的方式,而是采用 CAS 加synchronized关键字的方式实现一种更加细粒度的锁,相当于是把这个锁的控制控制在了这种更加细粒度的哈希桶的这个级别,然后在写入键值对的时候,这个可以锁住哈希桶的这种链表的这种这个头节点,这样的话,就不会影响到其它的哈希桶的写入,从而去提高对并发的这种处理能力。