首页 > 其他分享 > ReentrantLock的实现原理

ReentrantLock的实现原理

时间:2023-05-28 22:35:38浏览次数:34  
标签:synchronized 实现 Lock ReentrantLock 公平 原理 超时

ReentrantLock和synchronized都是可重入锁。

ReentrantLock可以实现公平锁和非公平锁,默认非公平锁,而synchronized只能实现非公平锁。

ReentrantLock基于AQS实现,Synchronized基于JVM的monitor实现。

ReentrantLock还支持可中断、设置超时时间、获取等待状态。而synchronized不支持。

synchronized和Lock的区别:

synchronized不用手动释放锁,lock需要手动释放锁。

Lock 提供了许多 synchronized 不具备的功能,例如获取等待状态、公平 锁、可打断、可超时。

 

标签:synchronized,实现,Lock,ReentrantLock,公平,原理,超时
From: https://www.cnblogs.com/yhb-blogs/p/17439006.html

相关文章

  • 常见项目——C语言实现2048小游戏(附源码和可执行文件)
    1.实现效果展示1.1界面图片说明:进入下面各页面后均可通过按键“q”来退出。1)菜单页2)开始游戏页3)游戏规则页4)按键说明页5)退出游戏页1.2视频展现戳此处查看视频演示1.3游戏源码及可执行文件(exe)下载支持作者,请关注公众号“优秀物联人”回复“2048小游戏”获取下......
  • CAS的工作原理
    CAS即比较并交换,是一种非阻塞式锁,也称为乐观锁,在无锁的情况下保证线程操作共享资源的原子性。工作原理:采用CAS的方式修改共享资源时会读取共享资源作为一个预期值,在进行比较,如果预期值和当前值一样,那么就会更新成功,如果不一样,会采用自旋的方式再次获取共享资源的值尝试完成更新,当......
  • synchronized底层原理
    synchronized对象锁采用互斥的方式使得在同一时刻只有一个线程能够持有锁并操作共享资源,如果其它线程想要获取锁就会进入阻塞状态,从而保证了线程安全问题。synchronized底层原理:synchronized的实现基于JVM的锁监视器(monitor),每个JVM都有维护自己的一套锁监视器,当集群部署时synchro......
  • 计算机组成原理 L02 指令集体系结构(ISA)复习-1
    计算机组成原理L02指令集体系结构(ISA)复习-1复习-1用作例题/课后题整理复习-2用作理论知识点整理如何使用大常数由于大数值范围:[-2^31,2^31-1],而I型指令常数字段只有16bits,所以需要使用两次I型指令。取立即数到寄存器高16位指令lui->loadupperimmediate与立即数进......
  • 树的最大深度-java实现
    使用递归的方法最为简洁、高效;通过主次遍历,主要不为空,书的深度就加一,同时比较右侧树的深度,每次返回最大值; 1publicintmaxDepth(TreeNoderoot){2returnroot==null?0:Math.max(maxDepth(root.left)+1,maxDepth(root.right)+1);3}ViewCode ......
  • Java学习:使用MyBatis Plus的分页插件和QueryWrapper结合自定义mapper xml实现多表关联
     Vo:/***用来返回给前端展示列表的数据实体*/@DatapublicclassCourseVoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringid;privateStringtitle;privateStringsubjectParentTitle;private......
  • jenkins+gitlab 实现代码自动部署
    Jenkins设置:点击:ManageJenkins:点击:ManageCredentials点击:StoresscopedtoJenkins下的全局点击:添加凭据添加gitlab访问凭据只需要填写如下三个即可。这里填写的是gitlab的账户,不是linux系统账户,这个gitlab账户要对你所需要部署的项目有权限才可以;设置ssh账户密码:选择Mana......
  • 内置User 实现用户管理
                                  2023.5.28一,创建用户在django中我们需要在templates的form中加入{%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,post提交时服......
  • springboot整合mybatis实现简单的crud操作
    使用MyBatis框架操作数据,在SpringBoot框架集成MyBatis,项目整体结构前提:准备一张student表。SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforuser------------------------------DROPTABLEIFEXISTS`student`......
  • Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询
     一、引言MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么今天说说MP怎么自定义sql语句吧。 二、具体实现使用注解实现:在我们Mapper接口中定义自定义方法即可。/***@Date:2019/6/1014:40*@Description</span>:User对象持久层*/p......