当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-说说synchronized和ReentrantLock的区别

金三银四精选java面试题-说说synchronized和ReentrantLock的区别

来源:图灵教育
时间:2024-01-02 13:11:45
 

说说synchronized和ReentrantLock的区别

可以从锁的实现性能功能特点等几个维度去回答这个问题:

  • 锁的实现: synchronized是Java语言的关键字,基于JVM实现。而ReentrantLock是基于JDK的API层面实现的(一般是lock()和unlock()方法配合try/finally语句块来完成。)
  • 性能: 在JDK1.6锁优化以前,synchronized的性能比ReenTrantLock差很多。但是JDK6开始,增加了适应性自旋、锁消除等,两者性能就差不多了。
  • 功能特点: ReentrantLock 比 synchronized 多了一些高级功能,如等待可中断、可实现公平锁、可实现选择性通知。
      • ReentrantLock提供了一种能够中断等待锁的线程的机制,通过lock.lockInterruptibly()来实现这个机制
      • ReentrantLock可以指定是公平锁还是非公平锁。而synchronized只能是非公平锁。所谓的公平锁就是先等待的线程先获得锁。
      • synchronized与wait()和notify()/notifyAll()方法结合实现等待/通知机制;ReentrantLock类借助Condition接口与newCondition()方法实现。
      • ReentrantLock需要手工声明来加锁和释放锁,一般跟finally配合释放锁。而synchronized不用手动释放锁。

下面的表格列出了两种锁之间的区别: