千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  应聘面试  >  Java面试题  > synchronized和ReentrantLock的异同点

synchronized和ReentrantLock的异同点

来源:千锋教育
发布人:wjy
时间: 2022-11-19 15:53:36 1668844416

  目前不涉及原理层面的比较,简单介绍一下两者的异同

  相同点

  1.在功能上它们都是通过加锁方式来协调多线程对共享变量的访问,而且都是同步式阻塞。

  2.都是可重入锁,即一个线程可以多次获得同一把锁。

  3.都保证了可见性、原子性(互斥性)。

synchronized和ReentrantLock的异同点

  不同点

  1、两者最大的区别就是synchronized是Java内置的关键字,是原生语法层面的互斥,是JVM层面的同步机制。而ReentrantLock是JDK5之后提供的API层面的互斥锁,需要lock(),unlock()方法结合try/finally语句实现。

  2、在性能上,synchronized优化前,它的性能相比ReentrantLock要差一些。但在synchronized优化后,两者性能差距不大了。

  3、synchronized隐式地获得、释放锁,ReentrantLock显式地获得、释放锁。

  4、相比于synchronized,ReentrantLock提供了一些高级功能,主要有三种。

  等待可中断,即持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待。这相对于synchronized来说可以避免出现死锁的情况。通过lock.lockInterruptibly()来实现这个机制。ReentrantLock可以实现公平锁。ReentrantLock可以通过Condition类绑定多个条件,实现分组唤醒需要唤醒的线程们。synchronized只能随机唤醒一个线程或唤醒全部线程。

  5、通过Lock能知道是否成功获取到锁,而synchronized无法做到。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT