全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  Java面试题

synchronized和ReentrantLock的异同点

发布时间:2022-11-19 15:53:36
发布人:wjy

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

  相同点

  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无法做到。

相关文章

华为外包java面试题-Java实现单链表的逆序

2023-07-25

Java程序员面试题

2023-07-21

Java面试题及答案

2023-07-20

什么是线程的上下文切换?

2022-11-23

synchronized和ReentrantLock的异同点

2022-11-19

什么是锁消除和锁粗化?

2022-11-19
在线咨询 免费试学 教程领取