关于java:通俗易懂的JUC源码剖析StampedLock

34次阅读

共计 518 个字符,预计需要花费 2 分钟才能阅读完成。

StampedLock 的作用

StampedLock 是 JDK1.8 新增的类,它相似 ReadWriteReentrantLock,也有读写锁的性能,它还多了一种乐观读锁,它与 ReadWriteReentrantLock 的区别在于它是不可重入的,ReadWriteReentrantLock 是可重入的。

StampedLock 有 三种模式 mode 和 一个版本号stamp。

三种模式:
乐观写模式 :writeLock(),获取胜利时,其余获取写锁或读锁的线程需阻塞期待。
乐观读模式 :readLock(),多个线程能够同时获取读锁,获取写锁的线程须要期待。罕用于读少写多的场景。
乐观读模式:tryOptimisticRead(),只是简略的位运算测试并返回 stamp 值,没有 CAS 获取锁的过程,因而性能比拟高,罕用于读多写少的场景。

版本号 stamp:
当调用 StampedLock 类中获取锁的系列函数时,会返回一个 long 型的 stamp,它用来示意锁的状态。其中 try 系列的获取锁函数,如果获取失败了会返回 0。当调用开释锁或转换锁 (3 种模式锁互相转换) 的函数时,须要把获取锁返回的 stamp 作为参数,传入函数中。

后续再更新 … 感兴趣的同学记得关注哦 ^_^

正文完
 0