一、语法层面
- synchronized:是关键字,源码在 JVM 中(C++ 实现);退出同步代码块时自动释放锁。
- Lock:是接口,源码由 JDK 提供(Java 实现);需手动调用
unlock()释放锁。
二、功能层面
- 共性:都属于悲观锁,具备互斥、同步、可重入的基本功能。
- Lock 的独有功能:支持公平锁、可打断、可超时、多条件变量;有多种场景实现(如
ReentrantLock、ReentrantReadWriteLock读写锁)。
三、性能层面
- 无竞争时:
synchronized有偏向锁、轻量级锁等优化,性能不错。 - 竞争激烈时:
Lock的实现通常性能更优。