相同点:
- 都能解决线程安全问题
不同点:
- synchronized是关键字,是JVM层面的底层啥都帮我们做了,而Lock是一个接口,是JDK层面的有丰富的API。
- Lock是显式锁(手动开启和关闭锁,别忘记关闭锁), synchronized是隐式锁, 出了作用域自动释放
- Lock手动开启和关闭锁,synchronized是自动释放
- Lock只有代码块锁,synchronized有代码块锁和方法锁
- synchronized是不可中断的,Lock可以中断也可以不中断
- 使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有更好的扩展性(提供更多的子类)
优先使用顺序:
Lock >同步代码块(已经进入了方法体,分配了相应资源) >同步方法(在方法体之外)