ReentrantLock基于AQS的公平锁和非公平锁的实现区别

ReentrantLock锁的实现是基于AQS实现的,所以先简单说下AQS:

AQS是AbstractQueuedSynchronizer缩写,顾名思义:抽象的队列同步器,它是JUC里面许多同步工具类实现的核心

其实简单来说AQS有两个核心,一个是volatile修饰的int类型state,这个是记录处于等待中需要持有锁和正在持有锁的线程数量

/**
 * The synchronization state.
 */
private volatile int state;

第二个就是Node内部类,他是AQS里面FIFO双向队列节点的实现,他的一些属性如下:

static final class Node {     volatile int waitStatus;//等待状态

        volatile Node prev;//前驱节点

        volatile Node next;//后继节点

        volatile Thread thread;//申请同步状态的线程

        Node nextWaiter;//等待节点的后继节点(后续出AQS详细篇再细讲)
    }

 

这种结构可以从任意的一个节点开始很方便的访问前驱和后继节点。每个Node由线程封装,当线程竞争失败后会加入到AQS队列中去。

基于这些再继续聊下ReentrantLock的公平和非公平锁的实现

ReentrantLock锁的实现基于AQS,如下sync抽象内部类:

abstract static class Sync extends AbstractQueuedSynchronizer{
  abs
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值