synchronized 和 Lock、ReentrantLock有什么区别

synchronized 与Lock的区别

  • synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁。
  • synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 lock 需要自己加锁和释放锁,如果使用不当没有 unLock()去释放锁就会造成死锁,所以常在finally代码块释放。
  • 通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。

 

synchronized 早期的实现比较低效,对比 ReentrantLock,大多数场景性能都相差较大,但是在 Java 6 中对 synchronized 进行了非常多的改进。

主要区别如下:

  • ReentrantLock 使用起来比较灵活,但是必须有释放锁的配合动作。
  • ReentrantLock 必须手动获取与释放锁,而 synchronized 不需要手动释放和开启锁。
  • ReentrantLock 只适用于代码块锁,而 synchronized 可用于修饰方法、代码块等。

你可能感兴趣的:(java进阶)