Lock接口

56 篇文章 0 订阅
7 篇文章 0 订阅

锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。在lock接口出现之前程序是靠synchronized关键字实现锁功能,lock接口提供了与synchronized关键字类似的同步功能,只是在使用的过程中需要显示的获取和释放锁。

缺点:缺少隐士获取释放锁的便捷性

有点:拥有锁获取与释放的可操作性,可中断的获取硕=锁以及超市获取锁等特性

适合Lock的场景:

先获取锁A,然后在获取锁B,当锁B获得后,释放锁A同时获取锁C,当锁C获取后,在释放B同时获取锁D。

lock示例

 ReentrantLock lock = new ReentrantLock();
      lock.lock();
      try {
      }finally {
    	  lock.unlock();
      }

注意

1、在finally里释放锁,目的是保证获取到锁后,最终能够被释放

2、不要讲获取锁的过程卸载try块中,因为如果在获取锁时发生了异常,异常抛出的同时,也会导致锁无故释放

 

Lock接口提供的synchronized关键字不具备的主要特性

特性描述
尝试非阻塞的获取锁当前线程尝试获取锁,如果如果这一时刻锁没有被其它的线程获取到,则成功获取并持有锁
能被中断的获取锁获取到锁的线程能够响应中断,当前获取到锁的线程被中断时,中断异常将会被抛出,同时锁会被释放
超时获取锁在指定的截止时间之前获取锁,如果截止时间到了仍旧无法获取锁,则返回

 

Lock基本Api

方法名称描述
void lock()获取锁,调用该方法线程将会获取锁,当获取锁后,从该方法返回
void lockInterruptibly() throws InterruptedException可中断获取锁,和lock方法的不同之处在于该方法会响应中断,即在锁的获取中可以中断当前线程
boolean tryLock()尝试非阻塞的获取锁,调用该方法立即返回,如果能够获取在返回true,否则返回true
boolean tryLock(long time,TimeUnit unit) hrows InterruptedException

超时获取锁,当前线程在以下3中情况下回返回

1、当前线程在超时时间内获取了锁

2、当前线程在超时时间内被中断

3、超时时间结束,返回false

void unlock()释放锁

Condition newCondition()

获取等待通知组件,该组件和当前锁绑定,当前线程只有获取了锁,才能调用该组件的wait()方法。调用后,当前线程将释放锁

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值