1.分段锁其实是一种锁的设计,并不是具体的一种锁,对于ConccurrentHashMap而言,骑兵法的实现就是通过分段锁的形式来实现高效的并发操作.
2.我们以ConccurrentHashMap来说一下分段锁的含义以及设计思想,ConccurrentHashMap中的分段苏称为Segment,它即类似于HashMap(JDK7和JDK8中HashMap的实现)的结构,即内部拥有一个Entry数组,数组中的每个数组又是一个链表;同时又是一个ReentrantLock(Segment继承了ReentrantLock).
3.当需要put元素的时候,并不是对整个hashmap进行加锁,而是先通过hashcode来知道他要放哪一个分段中,然后对分段加锁,所以当多线程put的时候,只要不是放在一个分段这种,就实现了真正的并行插入.
4.但是,在统计size的时候,可就是获取hashmap全局信息的时候,就需要获取所有的分段锁才能统计。
5.分段锁的设计目的是细化锁的粒度,当操作不需要更新整个数组的时候,就仅仅针对数组中的一项进行加锁操作。