首页 > 其他分享 >Synchronized锁和Reentrantlock的区别和联系以及锁升级

Synchronized锁和Reentrantlock的区别和联系以及锁升级

时间:2024-10-11 12:48:08浏览次数:10  
标签:这个 Synchronized Reentrantlock 升级 加锁 线程 进行

二者的底层实现:

Synchronized就是基于monitor对象主要的为

Owner获得这个锁资源的线程唯一标识符(线程ID)
Count线程获得几次锁(可重入锁的实现)
Contention List等待队列(线程加锁失败的情况下)

Reentrantlock是基于AQS

这个就是表示是哪一个线程获得这个锁资源

                                         这个就是表示的是这个锁有没有被其他线程获得或者说相同的线程获得了几次锁(也就是可重入锁)

联系: 这两个锁都是可重入锁并且都是实现了同步机制

区别:  

1.从类型来说:

Synchronized是一个关键字并且是JVM层面上面的锁但是Reentrantlock是一个类并且实现了lock接口

2.从加锁以及解锁的过程来说

Synchronized可以修饰一个方法这个方法可以是静态方法也可以是非静态方法这个就产生了 类锁(对于这个类的所有的实例来说只有一个线程可以获得这个锁资源)以及对象锁(对于类的一个对象实例来说只有一个线程可以获得锁资源)除此以外加锁都是自动加锁

Reentrantlock的加锁和解锁都是需要进行手动进行的并且除此以外再进行解锁的时候我们是再finally语句块进行unlock方法(释放锁资源)原因: 如果一个线程获得锁资源之后但是这个时候出现异常这个时候是不会释放锁资源的这个时候其他线程就会处于阻塞的状态

3.加锁的方式来说

Reentrantlock可以实现非阻塞式加锁的方式

这个进行加锁操作的话如果加锁失败的时候那么就会返回false,这个时候我们就会让这个线程做其 他的事情提高了线程的利用率

 这个进行加锁操作的时候会设置一个等待的时间,如果在设置设置的时间的范围里面还是加锁失败的话那么就会返回false

4.Reentrantlock还可以实现公平锁和非公平锁:

本质上就是加锁的时候就是要判断阻塞队列中是否有线程进行排队等待

5.Reentrantlock还可以实现Condition条件的绑定:

简单来说就是说如果一个线程在被Condition的实例对象使用await()方法之后那么如果想要将其进行唤醒的话那么就需要再次通过相同的Condition的实例对象使用sign进行一次的唤醒才会执行后面的业务逻辑signall的意思将被这个条件绑定的所有的线程都进行唤醒

Synchronized锁升级:

就是 无锁 偏向锁(这个在我看来就是一个标识符) 轻量级锁 重量级锁进行升级的过程

标签:这个,Synchronized,Reentrantlock,升级,加锁,线程,进行
From: https://blog.csdn.net/2201_75397629/article/details/142782210

相关文章

  • kafka集群升级新策略,Cloudera运维专家来揭秘:助你轻松应对大数据挑战
    项目背景我们团队负责维护的Kafka集群承载了公司大部分实时数据的收集与传输任务。然而,目前存在一些问题,严重影响了集群的稳定性、用户体验以及管理员的运维效率:当前集群版本较低,且低版本的bug频繁出现,导致集群稳定性受到威胁。例如,violet集群最近因触发bug而出现不可......
  • 修复HTTPS升级后出现 Mixed Content: The page at 'https://xxx' was loaded over HTT
    背景由于需要使用摄像头拍照,需要将原来的http升级到https,通过一顿捣鼓,升级成功。不过页面加载出现了问题,具体的提示是说:你的页面是在https环境,但是你访问了一个资源(我这里是iframe,也可能是stylesheet等其他资源),而这个资源是在http环境下的,浏览器不给你这样玩。https只能访问h......
  • 康达新材: 以CRM丰富数字化转型助推业务全面升级
    康达新材料(集团)股份有限公司(简称“康达新材”)成立于1998年,深交所主板上市,公司管理总部位于上海浦东新区,拥有500余人的研发团队,2023年集团总人数超过1700人,产值近28亿元。康达新材主营胶粘剂与特种树脂新材料、显示材料、电磁兼容设备、电源模块技术,多个系列产品性能处于国内......
  • pg大版本升级
    pg大版本升级环境9.6.24升级到14.13同一台机器本地升级步骤新版本需要初始化数据库initdb。创建测试数据:sysbench--db-driver=pgsql--pgsql-host=127.0.0.1--pgsql-port=5432--pgsql-user=postgres--pgsql-db=testdb--table_size=10000000--tables=1--threa......
  • 命令行升级vcsa
    今天给客户升级vcsa的安全补丁时遇到个怪问题,客户前段时间vcsa出问题了,所以用VAMI(就是5480那个页面)进行了恢复,结果vcsa是恢复了,但是VAMI的页面一直卡在恢复界面,重启都没用,所以只能通过命令行来进行补丁安装,记录一下方便以后使用1.在vcsa虚拟机上挂载升级包mount/dev/cdrom/mnt......
  • WindowsTerminal安装,Windows powershell和powershell区别,powershell升级方法
    1.WindowsTerminal安装从微软应用商店搜索获取即可2.Windowspowershell和powershell区别WindowsPowerShell和PowerShell是两个独立的产品,主要区别在于其运行平台和构建基础‌。以下是具体对比:‌运行平台‌:WindowsPowerShell:仅在Windows上运行,随Windows系统附带。Power......
  • Mac 系统终端和vscode终端的pnpm版本和路径不一致问题,而且vscode终端的pnpm没法升级
    系统终端whichpnpm路径是/Users/zhanglinfeng/.nvm/versions/node/v16.19.1/bin/pnpm vscode终端 whichpnpm 路径是/usr/local/bin/pnpm 为了跟系统的一致,需要修改.zshrc文件新的#AddRVMtoPATHforscripting.MakesurethisisthelastPATHvariablec......
  • Windows 11 WIFI/无线网络因为升级驱动失败而消失的解决办法 - 升级你的Windows系统
    上周六Intel的驱动管理软件提醒有驱动更新,于是升级,其余的驱动都升级正常,不料升级WIFI无线网络导致WIFI功能凭空消失,在控制面板里面对应的适配器也不见了,不是禁用,而是不存在了.打开设备管理器,对应的网络适配器也显示黄色惊叹号.于是先是尝试重新安装驱动,无果,虽......
  • 在K8S中,Deployment升级策略有哪些?
    在Kubernetes(K8s)中,Deployment的升级策略主要用于控制Pod副本的更新过程,以确保应用程序的平滑过渡和最小化的服务中断。以下是Kubernetes中Deployment升级策略的详细说明:1.滚动更新(RollingUpdate)概述:滚动更新是Deployment的默认升级策略。它通过逐步替换旧的Pod副本,以批次的......
  • 在K8S中,Deployment 升级过程有哪些?
    在Kubernetes(K8s)中,Deployment的升级过程是一个受控且平滑的过程,用于将应用的新版本无缝地替换旧版本。以下是Deployment升级过程的详细步骤:1.更新Deployment配置准备新版本镜像或配置:确定新版本的应用程序镜像或需要更改的配置。更新Deployment的YAML配置文件,例如更改镜像......