news 2026/5/14 11:24:34

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/5/9 7:59:28

python基于django的社区流浪动物领养管理系统_65kwrn28

目录基于Django的社区流浪动物领养管理系统核心功能模块技术实现社会价值关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的社区流浪动物领养管理系统 该系统旨在通过数字…

作者头像 李华
网站建设 2026/5/11 21:07:16

python基于django的考公考编面试刷题平台系统的设计与实现_b23o02nq

目录基于Django的考公考编面试刷题平台系统设计系统功能模块设计模拟面试与数据分析技术架构实现创新点与实用价值关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的考公考…

作者头像 李华
网站建设 2026/5/11 2:19:43

qsort-简单使用 · vs2022调试

把10个整形数据排序,你会怎么做?先来考虑升序情况最先想到用冒泡法做,ok,正好回忆一下oi~那还有更简洁的方法吗?有请 qsort 函数qsort 函数:void qsort(void*base,size-t num,size-t size, int (*compar)(const void*,…

作者头像 李华
网站建设 2026/5/9 7:53:05

吐血推荐8个AI论文平台,继续教育学生轻松搞定毕业论文!

吐血推荐8个AI论文平台,继续教育学生轻松搞定毕业论文! AI 工具如何助力论文写作,成为学生新宠 在继续教育领域,论文写作一直是许多学生的“硬骨头”。无论是本科、硕士还是博士阶段,论文的撰写不仅考验学术能力&#…

作者头像 李华