ReetrantLock 锁

公平与非公平

  • 公平锁:在获取锁时存在一个队列,后到的线程会自动排在后面,等待前面的线程执行结束后执行。体现一个先来后到的公平性。
  • 非公平锁:实现原理和公平锁存在一些区别,在获取锁时会先尝试获取抢占锁,不去排队,抢占成功则直接向下执行,抢占失败也会加入到队列的后面,等待排队。
  • new ReentrantLock();默认是非公平锁。会稍稍提升一点性能。因为减少的入队列和出队的损耗。true为公平锁。

lock、unlock、tryLock

  • lock: ReentrantLock 可以设置超时时间,是可重入锁,阻塞式锁,获取失败会一直阻塞等待,既获取到锁的线程可以重复使用lock上锁,内部会记录当前线程lock的次数。
  • unlock: 释放锁,将线程的获取的锁次数-1,一个线程lock多少次,就需要unlock多少次,才能真真的释放锁。
  • tryLock: 与lock的功能类型一样,都是获取锁,不同点是tryLock会返回是否成功获取到锁,tryLock 不阻塞线程,获取失败就返回false,在代码实现上,可以使用该方法进行一些不获取到锁也可以向下执行的其他操作。或者通过while循环跳过锁进行遍历。

实现原理

底层实现是基于CAS和AQS,不同于synchronized的锁 实现是通过保存在对象头中的,而ReentrantLock是通过自身的API,以及int的state等复杂逻辑判断锁的状态 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值