ReentrantLock

public class ReentrantLock implements Lock, java.io.Serializable {}

与Synchronized的区别:

  • ReentrantLock和synchronized都是独占锁,只允许线程互斥的访问临界区。但是实现上两者不同:synchronized加锁解锁的过程是隐式的,用户不用手动操作,优点是操作简单,但显得不够灵活。一般并发场景使用synchronized的就够了;ReentrantLock需要手动加锁和解锁,且解锁的操作尽量要放在finally代码块中,保证线程正确释放锁。ReentrantLock操作较为复杂,但是因为可以手动控制加锁和解锁过程,在复杂的并发场景中能派上用场。

  • ReentrantLock和synchronized都是可重入的。synchronized因为可重入因此可以放在被递归执行的方法上,且不用担心线程最后能否正确释放锁;而ReentrantLock在重入时要却确保重复获取锁的次数必须和重复释放锁的次数一样,否则可能导致其他线程无法获得该锁。

 简单点说:ReentrantLock操作稍微复杂点,但是能手动加锁解锁,操作比较灵活。

具体区别:

1、公平锁:默认都是非公平锁,ReentrantLock能实现公平锁(ReentrantLock lock = new ReentrantLock(true))。说明:公平锁是指当锁可用时,在锁上等待时间最长的线程将获得锁的使用权。而非公平锁则随机分配这种使用权。

2、相应中断:ReentrantLock给我们提供了一个可以响应中断的获取锁的方法lockInterruptibly();

3、限时等待:tryLock();

4、等待通知(唤醒)机制:lock.newCondition(); condition.await();condition.signal();可利用实现堵塞队列机制

 

参考资源:https://www.cnblogs.com/takumicx/p/9338983.html

                https://blog.csdn.net/u014730165/article/details/82144848

 

 

 

转载于:https://my.oschina.net/anlen/blog/3072974

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值