您当前的位置: 首页 > 

Dongguo丶

暂无认证

  • 3浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

StampedLock源码解析

Dongguo丶 发布时间:2021-09-27 20:57:15 ,浏览量:3

文章目录
  • 属性
  • 构造函数
  • 内部类
  • 写锁的获取、释放
    • 1.写锁的获取
    • 2.写锁的释放
  • 读锁的获取和释放
    • 1.读锁的获取
    • 2.读锁的释放
  • 乐观读锁获取、校验
    • 1.乐观读锁的获取
    • 2.乐观读锁的校验
  • 锁转换
    • 1.转换为写锁
    • 2.转换为读锁
    • 3.转换乐观读
StampedLock没有直接实现ReadWriteLock,但是提供了方法可以返回ReadWriteLock接口的实现类,如下:

public Lock asReadLock() {
    ReadLockView v;
    return ((v = readLockView) != null ? v :
            (readLockView = new ReadLockView()));
}

public Lock asWriteLock() {
    WriteLockView v;
    return ((v = writeLockView) != null ? v :
            (writeLockView = new WriteLockView()));
}

public ReadWriteLock asReadWriteLock() {
    ReadWriteLockView v;
    return ((v = readWriteLockView) != null ? v :
            (readWriteLockView = new ReadWriteLockView()));
}

可以通过asReadWriteLock方法与之前使用ReentrantReadWriteLock无缝兼容,也可以通过asReadLock和asWriteLock方法单独使用读锁或者写锁。

属性

StampedLock中定义了多个常量,如下:

/**
 * @since 1.8
 * @author Doug Lea
 */
public class StampedLock implements java.io.Serializable {
    
	private static final long serialVersionUID = -6001602636862214147L;
	//处理器数量 用于自旋控制
	private static final int NCPU = Runtime.getRuntime().availableProcessors();
	//在当前节点加入队列前,如果队列头尾节点相等,即属性whead和wtail相等,
	//先让其自旋一定的次数,自旋的值 多核CPU:(1  1) ? 1             
关注
打赏
1638062488
查看更多评论
0.0434s