news 2026/6/10 22:45:25

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/10 13:00:04

python基于django的企业人力资源招聘管理系统_fsjuwx26

目录基于Django的企业人力资源招聘管理系统概述系统功能模块技术实现特点关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的企业人力资源招聘管理系统概述 该系统采用Pyt…

作者头像 李华
网站建设 2026/6/10 13:25:29

【k8s设置污点/容忍】

背景: 一个应用占用的资源很大,而节点不是很大时,需要让这个应用单独占据一个节点,不让别的应用调度到这个节点上,从而避免业务高峰时资源不够在node上设置污点kubectl taint nodes node-1 dedicatedadmin-server:NoSc…

作者头像 李华
网站建设 2026/6/10 13:20:00

python基于django的社区技术论坛交流平台_hnqvkp45

目录项目概述核心功能模块技术实现亮点应用场景与优势关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!项目概述 该项目是一个基于Django框架开发的社区技术论坛交流平台&#xff0c…

作者头像 李华
网站建设 2026/6/10 14:51:31

深度学习毕设项目:基于python的蔬菜识别基于CNN卷积网络的蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华