面试题: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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM