[关闭]
@yulongsun 2018-06-12T09:00:10.000000Z 字数 784 阅读 859

J.U.C专题 - JDK1.8新增StampedLock

J.U.C专题


  1. StampedLock是什么?
    StampedLock是ReentrantLock\ReadWriteLock的增强版,包含了RL和RWL的基本功能。最重要的是实现了对读写锁的改进
    三种模式控制读写:

    • 乐观读
  2. StampedLock为什么会出现?解决了什么问题?
    问题:原来的RWL在多线程情况下,如果Reader远大于Writer,则容易出现写饥饿情况。(因为RWL读-读-不互斥,读-写-互斥,写-写-互斥)
    解决:StampedLock的出现就是为了解决【读-写-互斥】的情况。极大的提升吞吐量。

    • 概念补充
      乐观锁:每次拿数据的时候不上锁,而是判断Stamped是否被修改,如果被修改,则重新拿数据。
      悲观锁:每次拿数据的时候都锁上。
  3. StampedLock实现思想

    • StampedLock中的重要思想是:读不阻塞写(乐观读策略)
      【核心思想】是:读的时候如果发生了写,则应该重读,而不是阻塞写。所以读不阻塞读,也不阻塞写。
    • StampedLock中使用了CLH自旋锁。
  4. API基本使用

    • tryOptimisticRead() //尝试获取乐观锁
    • validate(stamped) // 如果读的时候没有发生写,则validate返回的是true。可以看成是一个弱版本的读锁,可以被任何时间被闯入的写者打断。
    • tryConvertToWriteLock() //锁升级
      image_1cfphvp6g19fi1c6duhas8u1s3v1m.png-293.6kB
  5. 性能比较
    ReentrantLock VS ReentrantReadWriteLock VS Synchronized VS StampedLock

  6. 参考
    https://coderbee.net/index.php/concurrent/20140628/947
    https://blog.csdn.net/sunfeizhi/article/details/52135136

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注