58 【面试官:synchronized和ReentrantLock 区别 - 后端研发工程师哈哈 | 小红书 - 你的生活指南】 😆 kUg2JXOOkS8LkrX 😆 http://xhslink.com/mN9vYR

Untitled

1、锁的实现:synchronized 是 Java 语言的关键字,基于 JVM 实现。而 ReentrantLock 是基于 JDK 的 API 层面实现的(一般是 lock() 和 unlock() 方法配合 try/finally 语句块来完成。)

2、性能:在 JDK1.6 锁优化以前,synchronized 的性能比 ReentrantLock 差很多。但是 JDK6 开始,增加了适应性自旋、锁消除等,两者性能就差不多了。

3、功能特点:ReentrantLock 比 synchronized 增加了一些高级功能,如等待可中断、可实现公平锁、可实现选择性通知。

区别 synchronized ReentrantLock
锁实现机制 对象头监视器模式 依赖 AQS
灵活性 不灵活 支持响应中断、超时、尝试获取锁
释放锁形式 自动释放锁 显示调用 unlock()
支持锁类型 非公平锁 公平锁 & 非公平锁
条件队列 单条件队列 多个条件队列
可重入支持 支持 支持