synchronized和lock有什么区别

6 阅读1分钟

一、语法层面

  • synchronized:是关键字,源码在 JVM 中(C++ 实现);退出同步代码块时自动释放锁
  • Lock:是接口,源码由 JDK 提供(Java 实现);需手动调用unlock()释放锁

二、功能层面

  • 共性:都属于悲观锁,具备互斥、同步、可重入的基本功能。
  • Lock 的独有功能:支持公平锁、可打断、可超时、多条件变量;有多种场景实现(如ReentrantLockReentrantReadWriteLock读写锁)。

三、性能层面

  • 无竞争时:synchronized有偏向锁、轻量级锁等优化,性能不错。
  • 竞争激烈时:Lock的实现通常性能更优。