面试题:synchronized和lock的区别

synchronized和lock的区别

  • 原始构成:
    • synchronized是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步块或者方法中才能调用wait/notify)
    • lock是类,是api层面的锁
  • 使用方法:
    • synchronized不需要手动释放锁,当synchronized代码执行完以后系统会自动让线程释放对锁的占用,
    • ReentrantLock则需要手动释放锁,不然可能会导致死锁现象。
  • 是否可中断
    • synchronized不可中断
    • ReentrantLock可以中断,也可以不中断,中断的话要调用Interrupt
  • 加锁是否公平
    • synchronized非公平锁
    • ReentrantLock两者都可以,默认公平锁。主要看构造方法的boolean值。
  • 绑定多个condition
    • synchronized没有
    • ReentrantLock用来实现分组唤醒需要的线程们,可以精确唤醒,而不是像synchronized要么随机唤醒一个或者全部唤醒。

ReentrantLock:https://www.cnblogs.com/dalianpai/p/14204465.html

synchronized:https://www.cnblogs.com/dalianpai/p/14178191.html

posted @ 2021-01-04 19:43  天宇轩-王  阅读(589)  评论(0编辑  收藏  举报