synchronized 和 ReentrantLock 有什么区别?
先自己想一想,再看参考要点
参考要点
- synchronized 由 JVM 实现,ReentrantLock 由 JDK 基于 AQS 实现,性能大致相同
- ReentrantLock 支持等待可中断、公平锁和绑定多个 Condition,synchronized 都不支持
- ReentrantLock 必须在 finally 中 unlock(),synchronized 由 JVM 保证释放
- 不需要这些功能时优先用 synchronized,但 JDK 21 的虚拟线程在 synchronized 中阻塞会固定载体线程,包住 I/O 的临界区改用 ReentrantLock(JDK 24 起基本不再固定)