news 2026/6/22 7:05:04

synchronized和ReentrantLock

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
synchronized和ReentrantLock

ReentrantLock

可重入互斥锁,和synchronized的定位类似,都用于实现互斥效果,保证线程安全。

ReentrantLock的用法:

  • lock():加锁,获取不到锁就死等
  • trylock():超时时间加锁
    如果设置了超时参数,超时后放弃加锁
    如果不设置超时参数,不会导致阻塞,加锁成功返回true,失败返回false
  • unlock():解锁
ReentrantLock lock = new ReentrantLock(); -------------------------------------------------- lock.lock(); try { //working } finally { lock.unlock(); }

ReentrantLock和synchronized的区别

  1. synchronized是一个关键字,是JVM内部实现的(大概率是基于C++实现)
    ReentrantLock是标准库的一个类,在JVM外实现的(基于Java实现)
  2. synchronized使用代码块进行加锁解锁,不需要考虑解锁问题
    ReentrantLock需要lock/unlock方法,使用灵活,但是容易遗漏unlock
  3. synchronized在申请锁失败后会死等
    ReentrantLock可以使用trylock方法等待一段时间后就放弃
  4. synchronized是非公平锁
    ReentrantLock默认是非公平锁,但是可以通过构造方法传入一个true开启公平锁模式
  5. synchronized使用Object类的wait/notify实现等待/唤醒,每次唤醒都是随机唤醒
    ReentrantLock可以搭配Condition类实现等待/唤醒,可以更精准得唤醒某个指定的线程。
  • 竞争不激烈的时候使用synchronized锁,效率更高,自行解锁更方便
  • 锁竞争激烈的时候使用ReentrantLock锁,搭配trylock方法更灵活得控制加锁,而不是死等
  • 如果要使用公平锁,使用ReentrantLock锁
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 7:33:25

python基于django的社区健身器材报修系统 公园管理系统_g9741947

目录基于Django的社区健身器材报修系统与公园管理系统关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的社区健身器材报修系统与公园管理系统 该系统旨在通过数字化手段提…

作者头像 李华
网站建设 2026/6/20 7:33:42

华为OD机试真题双机位C卷 【采购订单】C语言实现

采购订单 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 算法考点详解 题目描述 在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(P…

作者头像 李华
网站建设 2026/6/19 21:23:47

2026必备!8个AI论文平台,助你轻松搞定本科毕业论文!

2026必备!8个AI论文平台,助你轻松搞定本科毕业论文! AI 工具的崛起,让论文写作不再难 在当前这个信息爆炸的时代,学术研究和论文写作已成为本科生必须面对的重要任务。无论是课程作业还是毕业论文,都对学生…

作者头像 李华
网站建设 2026/6/19 21:24:25

突破AI原生应用领域可控性的瓶颈

突破AI原生应用领域可控性的瓶颈:从"黑箱魔法"到"透明工坊" 关键词:AI原生应用、可控性、可解释性、意图对齐、动态反馈 摘要:当AI从"辅助工具"进化为"原生构建者",我们不再满足于它"偶尔给出惊喜",而是需要它"稳…

作者头像 李华