• 数据类型
  • 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所对应的数据完全独立。在释放锁时,此锁并不会被立刻销毁,而是暂时存于缓冲中。只有在如下条件成立时,锁才会被销毁:

    • -

      应用

      双层锁 用于Collection类的行锁。Collection类中,不同key所对应的数据完全独立,所以只需要对key加锁可以保证数据在并发访问时的一致性,行锁相对来说,锁定粒度小,也可以保证数据访问的高效性。