58 【面试官:synchronized和ReentrantLock 区别 - 后端研发工程师哈哈 | 小红书 - 你的生活指南】 😆 kUg2JXOOkS8LkrX 😆 http://xhslink.com/mN9vYR
1、锁的实现:synchronized 是 Java 语言的关键字,基于 JVM 实现。而 ReentrantLock 是基于 JDK 的 API 层面实现的(一般是 lock() 和 unlock() 方法配合 try/finally 语句块来完成。)
2、性能:在 JDK1.6 锁优化以前,synchronized 的性能比 ReentrantLock 差很多。但是 JDK6 开始,增加了适应性自旋、锁消除等,两者性能就差不多了。
3、功能特点:ReentrantLock 比 synchronized 增加了一些高级功能,如等待可中断、可实现公平锁、可实现选择性通知。
区别 | synchronized | ReentrantLock |
---|---|---|
锁实现机制 | 对象头监视器模式 | 依赖 AQS |
灵活性 | 不灵活 | 支持响应中断、超时、尝试获取锁 |
释放锁形式 | 自动释放锁 | 显示调用 unlock() |
支持锁类型 | 非公平锁 | 公平锁 & 非公平锁 |
条件队列 | 单条件队列 | 多个条件队列 |
可重入支持 | 支持 | 支持 |