https://xmind.ai/share/qSMk0B2P?xid=JmWYH0mH
类别 | synchronized | Lock |
---|---|---|
存在层次 | Java 的关键字,在 JVM 层面上 | 是一个类 |
锁的释放 | 1、以获取锁的线程执行完同步代码,释放锁 | |
2、线程执行发生异常,JVM 会让线程释放锁 | 在 finally 中必须释放锁,不然容易造成线程死锁 | |
锁的获取 | 假如 A 线程获得锁,B 线程等待。如果 A 线程阻塞,B 线程会一直等待 | 分情况而定,Lock 有多个锁获取的方式,具体下面会说到,大致就是可以尝试获得锁,线程可以不用一直等待 |
锁状态 | 无法判断 | 可以判断 |
锁类型 | 可重入 不可中断 非公平 | 可重入 可判断 可公平(两者皆可) |
性能 | 少量同步 | 大量同步 |
https://blog.csdn.net/u012403290/article/details/64910926
https://juejin.cn/post/7105677601934409759
https://xie.infoq.cn/article/4e370ded27e4419d2a94a44b3
https://learn.lianglianglee.com/专栏/Java 并发编程 78 讲-完/22 synchronized 和 Lock 孰优孰劣,如何选择?.md