为什么有了synchronized还需要ReentrantLock

ReentrantLock是JUC(java.util.concurrent)的一个组件,并且也是一个可重入锁。ReentrantLock有两个方法,一个是lock()用于加锁,一个是unlock()用于解锁,这样的做法有优点也有缺点:

缺点:程序员容易忘记解锁从而导致Bug的产生。

优点:更加的灵活,可以将lock()放在一个方法里,unlock()放进另一个方法里。

           ReentrantLock还提供了另一个方法tryLock(),对于synchronized来说,如果锁被占用了,将会进入阻塞状态,直到对方释放锁,不管这个时间多久都会一直等待;而对于tryLock()来说,此处不留爷自有留爷处,tryLock()将会立即返回或者等待一段时间后返回。这样就会导致节省了很多的资源以及更多的操作空间。

以下内容转载synchronized 和 ReentrantLock 区别是什么?_ConstXiong-CSDN博客

synchronized 竞争锁时会一直等待;ReentrantLock 可以尝试获取锁,并得到获取结果
synchronized 获取锁无法设置超时;ReentrantLock 可以设置获取锁的超时时间
synchronized 无法实现公平锁;ReentrantLock 可以满足公平锁,即先等待先获取到锁
synchronized 控制等待和唤醒需要结合加锁对象的 wait() 和 notify()、notifyAll();ReentrantLock 控制等待和唤醒需要结合 Condition 的 await() 和 signal()、signalAll() 方法
synchronized 是 JVM 层面实现的;ReentrantLock 是 JDK 代码层面实现
synchronized 在加锁代码块执行完或者出现异常,自动释放锁;ReentrantLock 不会自动释放锁,需要在 finally{} 代码块显示释放
————————————————
版权声明:本文为CSDN博主「ConstXiong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/meism5/article/details/90413901

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值