hbf548

多看源码多读书

0%

Synchronized 和 Lock锁的区别

相同点:

  • 都能解决线程安全问题

不同点:

  • synchronized是关键字,是JVM层面的底层啥都帮我们做了,而Lock是一个接口,是JDK层面的有丰富的API。
  • Lock是显式锁(手动开启和关闭锁,别忘记关闭锁), synchronized是隐式锁, 出了作用域自动释放
  • Lock手动开启和关闭锁,synchronized是自动释放
  • Lock只有代码块锁,synchronized有代码块锁和方法锁
  • synchronized是不可中断的,Lock可以中断也可以不中断
  • 使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有更好的扩展性(提供更多的子类)

优先使用顺序:
Lock >同步代码块(已经进入了方法体,分配了相应资源) >同步方法(在方法体之外)