相比synchronized,ReentrantLock新增的三个高级功能

Java在保证线程安全问题上可以从两个层面来保证线程安全:
  • 1、JVM层面,JVM层面保证线程安全是通过synchronized来实现的
  • 2、Java API,Java API方面可以通过JUC并发包中的ReentrantLock来实现

在JDK1.5之前synchronized的性能是弱于ReentrantLock的,但是在JDK1.5之后,对synchrnized进行了一些优化,使得synchronized跟ReentantLock在性能上差别不大,JDK1.5之后主要对synchrnized的优化有:适应性自旋锁、锁消除、锁粗化、轻量级锁、偏向锁等。

但是相比synchrnized来说,ReentantLock增加了三大高级功能,分别是:
  • 1、等待可中断:等待可中断是指当持有锁的线程长期不释放锁,那么正在等待的线程可以选择放弃等待,转而处理其它事情。可中断的特性对于处理执行时间非常长的同步块有很好的帮助。
  • 2、公平锁:公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来获得锁,可以理解为操作系统中的先来先服务。synchrnized是非公平锁,任何一个等待锁的线程都有可能获得锁,ReentrantLock默认情况下也是非公平的,但是可以通过构造函数来设定使用公平锁。
  • 3、锁可以绑定多个条件:锁可以绑定多个条件是指ReentrantLock可以绑定多个Condition对象,而在synchronized中,锁对象的wait()、notify()、notifyAll()方法可以实现一个隐含的条件,如果要和多个条件进行关联时,就不得不多添加锁,而ReentrantLock则无需这样做,只需要多次调用newCondition()方法就可以实现。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值