Java并发基础:ReentrantLock

Lock接口定义了锁的核心方法:
下列方法的具体实现逻辑由Lock的实现类定义。
1.lock():获取锁。
2.lockInterruptibly():获取锁的过程可以被中断,与Synchronized关键字的区别之一。
3.tryLock():尝试获取锁。
4.unLock():释放锁。
5.newCondition():可以使等待特定的条件,与Synchronized关键字的区别之一。
ReentrantLock是Lock接口的实现类
Lock接口方法的具体实现逻辑:
1.lock():直接调用AQS的acquire()方法,获锁失败会阻塞线程,将其加入等待队列。
2.lockInterruptibly():直接调用acquireInterruptibly()方法。
3.tryLock():无论获取锁成功与否,均会立即返回结果(T/F),获取失败不会阻塞线程。
4.unLock():直接调用AQS的release()方法。
5.newCondition():默认实现。

ReentrantLock实现了公平锁和非公平锁,底层实现是基于静态抽象类Sync(AQS的子类)的实现类NonfairSync和FairSync,默认使用非公平锁。
NonfairSync和FairSync的区别在于tryAcquire()的具体实现上,FairSync要求只有CLH队头的线程能够获取锁,从而保证获取锁的顺序性。
公平锁:若当前线程是CLH的头节点,则尝试获取锁。若当前线程不是CLH的头节点,直接入队尾等待,不尝试获取锁。
非公平锁:直接尝试获取锁,无需等待。获取锁失败则加入队尾等待。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值