- 数据类型
- Collection类
- 写-行锁
- 读-无锁
- Key-Value
- 写-分段锁
- 读-无锁
- SeqList
- 写-特殊行锁
- 读-无锁
- 锁类型
- 分段锁
- 应用
- 双层锁
- 特性
- 分段锁
- Key缓存锁
- 应用
数据类型
Collection类
写-行锁
写操作使用行锁,用于对一个Key加锁,保证同一时间只有一个线程对一个Key进行写操作。读-无锁
Collection类的写操作都为原子性操作,读操作时无需加锁。Key-Value
写-分段锁
Key-Value 使用分段锁,通过Key的HashCode进行分段,最多支持锁Size(默认128)个线程同时对整个Key-Value同时进行写操作读-无锁
Key-Value的写操作都为原子性操作,所以读操作时无需加锁SeqList
写-特殊行锁
SeqList 写操作使用行锁,用于对一个key加锁。但是SeqList的锁机制比较特殊:采用先申请顺序,再写入的方式。对于单个Key,在申请顺序时加锁,写入时无锁,以达到最高的写入性能
读-无锁
SeqList的写操作都为原子性操作,读操作时无需加锁
锁类型
分段锁
分段锁,通过Key的HashCode进行分段,最多支持锁Size个线程同时对整个Key-Value同时进行写操作
应用
K-V结构的写操作使用了分段锁
双层锁
特性
由一层分段锁和一层Key缓存锁组成,可为每个Key分配独立的锁,来保证每次访问key的线程只有一个。通过内部的实现机制,可以保证锁不会频繁的创建销毁的同时,可以控制同时存在在内存中锁的数量。
分段锁
在获取缓存中key锁、创建key锁、key锁加入缓存时使用、清除缓存中的key锁时,代替ReentrantLock或者synchronized,增强代码块需要锁时的并发处理能力。
Key缓存锁
为每个Key独立分配锁,保证不同key所对应的数据完全独立。在释放锁时,此锁并不会被立刻销毁,而是暂时存于缓冲中。只有在如下条件成立时,锁才会被销毁:
