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