千家信息网

synchronized与ReentrantLock的区别是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,synchronized与ReentrantLock的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。相同点:原子性,可见性,有
千家信息网最后更新 2026年11月02日synchronized与ReentrantLock的区别是什么

synchronized与ReentrantLock的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

相同点:

原子性,可见性,有序性,可重入性

不同点:

  1. synchronized是非公平锁,ReentrantLock可以创建公平与非公平锁。

  2. synchronized无法中断一个正在等待获取锁的线程,ReentrantLock使用lockInterruptibly可以感知中断获取锁的操作。

  3. ReentrantLock可以实现非块结构的加锁。

  4. ReentrantLock使用tryLock(time)来实现定时锁,也可避免死锁。

  5. 在实现生产者消费者模型时,synchronized加锁,只能唤醒所有等待锁的线程Object.notifyAll()。ReentrantLock可以使用condition减小等待锁的粒度,在唤醒线程时就可以针对条件队列来唤醒线程了Condition.signal(),提高效率。

  6. 在等待锁时,使用synchronized的线程进入的是BLOCKED状态,使用ReentrantLock的线程进入的是WAITING状态。

选择:

  1. ReentrantLock并不是一种替代内置锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。

  2. Java5时,ReentrantLock比内置锁可以提供更好的竞争性能,但在Java6后,使用了改善后的算法来管理内置锁,导致两者的差异越来越小,所以还是优先使用内置锁,仅当内置锁不能满足要求时,才可以考虑使用ReentrantLock。

PS:

  1. 在公平的锁上,线程将按照它们发出请求的顺序来获得锁,但在非公平的锁上,则允许插队:当一个线程请求非公平锁时,如果在发出请求的同时该锁状态变为可用,那么这个线程将跳过队列中所有等待线程并获得这个锁。拿一个生活中的场景举例子,在我晚上经常去的一家肉饼店,肉饼出的很慢,我们都需要付钱拿号等待,结果有个顾客过来点餐,他正好点到肉饼的时候肉饼出锅了,如果是非公平的场景,店员无视我们前面等待的顾客,就直接把肉饼给这位顾客了。

  2. 产生死锁的4个必要条件:互斥条件;请求与保持条件;不剥夺条件;循环等待条件;tryLock破坏了不剥夺条件。

看完上述内容,你们掌握synchronized与ReentrantLock的区别是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

线程 条件 肉饼 方法 状态 顾客 内容 场景 是非 更多 问题 队列 死锁 选择 不同 有序 相同 不适 必要 束手无策 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会主任 科技和互联网公司 疫情对互联网科技公司影响 上海互联网科技有限公司 凡科互联网科技 亿人帮互联网科技 互联网金融监管科技 太原新华互联网科技学校怎么样 深圳前海聚择互联网科技有限公司 互联网校园科技培训 昊天互联网科技有限公司 互联网科技商业 济南有互联网科技公司吗 互联网金融科技元年 上海钢联属于互联网科技股吗 深圳互联网科技的发展 互联网与数字科技关系 神州科技互联网有限公司 国产互联网科技公司 互联网科技职业技能培训学校 哈尔滨大商圈互联网科技有限公司 广州紫鲸互联网科技有限公司 新华互联网科技学校 港股互联网科技股 抖集互联网科技技术咨询 昆明中奇联合互联网科技 世界互联网科技成果奖 广州智享互联网科技 绵阳真晨互联网科技有限公司 盐城市攀科互联网科技有限公司
0