【每日一问】请说说synchronized和ReentrantLock的区别?
1、synchronized是JVM层次的锁实现,ReentrantLock是JDK层次的锁实现;
2、synchronized的锁状态是无法在代码中直接判断的,但是ReentrantLock可以通过ReentrantLock#isLocked判断;
3、synchronized是非公平锁,ReentrantLock是可以是公平也可以是非公平的;
4、synchronized是不可以被中断的,而ReentrantLock#lockInterruptibly方法是可以被中断的;
5、在发生异常时synchronized会自动释放锁,而ReentrantLock需要开发者在finally块中显示释放锁;
ReentrantLock获取锁的形式有多种:如立即返回是否成功的tryLock(),以及等待指定时长的获取,更加灵活;
6、synchronized在特定的情况下对于已经在等待的线程是后来的线程先获得锁(回顾一下sychronized的唤醒策略),而ReentrantLock对于已经在等待的线程是先来的线程先获得锁;
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 dreamer
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

