首页 > 编程语言 >java并发之锁的升级

java并发之锁的升级

时间:2023-08-01 16:44:55浏览次数:38  
标签:之锁 java text 并发 state marks nodes type id

偏向锁 --> 轻量级锁 --> 重量级锁,是synchronized的三种形态转换。   锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。   线程的状态: 0 就绪队列可能随时被CPU选中执行;阻塞队列需要等其他线程释放锁后来通知 重新进入就绪队列。  

偏向锁

例如我们的学校网站,同时使用的用户没有多少,并没有竞争,这样的情况没必要每次都加锁释放锁,这时候我们用偏向锁就可以了。synchronized一开始的状态是偏向锁,偏向锁是什么样子呢,加锁执行完后释放不需要通知阻塞队列,下次进来查看是我自己的锁 直接进来就好了。是一个简化的加锁和释放锁的过程。会让性能好很多。 偏向锁适用于没有什么并发的时候。  

轻量级锁

同一时刻经常性的出现竞争,使用轻量级锁,即竞争失败后不进入阻塞队列,他的逻辑是有一个死循环,不断对加锁任务进行访问,一旦锁释放 任务立刻执行,同时执行完后加锁速度也非常快。极高频率查看锁的状态非常消耗CPU,但优点也很明显 可以立刻感知锁的释放和加锁。这个循环查看就是cpu自旋。  

重量级锁

当高并发的情况,就会使用到阻塞队列,也就是加重量级锁,当竞争失败后进入阻塞队列,等另一个线程完全释放锁后 去阻塞队列通知,再将任务加入就绪队列。这样相比于轻量级锁大大降低了CPU的损耗。  

锁的优缺点比较

  0  

CAS替换操作细讲

总线一次性传输36-41bit,替换的头部有64bit,需要传输两次(分低32和高32)。 如果出现低32位更新后,高32位还未更新的空档期,时间片出现替换,其他线程发现你没有锁 给你标记为锁,这样整体结构就会发生改变。 所以持有锁也不一定是安全的,关键在于总线位数不到64位。为了防止这样的现象,更新前应该将总线锁住。  

标签:之锁,java,text,并发,state,marks,nodes,type,id
From: https://www.cnblogs.com/nliu/p/17596923.html

相关文章

  • 构造并发送Beacon帧以伪造任意WiFi热点
    请想象一下这样的情景:你可以任意伪造很多个WiFi热点,这个技术只能在linux上使用,而且对无线网卡也有一定的挑剔,具体的下面会讲~阶段一:基本原理首先需要搞清楚的是,手机、电脑等支持WiFi的设备,是如何得知周围无线热点的存在的?无线热点(通常就是无线路由器)会周期性地向外发......
  • Java之String系列--String, StringBuffer, StringBuilder区别
    简介本文介绍Java的String,StringBuffer,StringBuilder的区别。项StringStringBufferStringBuffer线程安全性不可变。原因:value数组是final类型。因为不可变,所以每次操作生成新对象。因为不可变,所以每次操作生成新对象。原因:value数组是final类型。原因:其父类(AbstractStringBuilder......
  • 随机高并发查询结果一致性设计实践
    一、前言物流合约中心是京东物流合同管理的唯一入口。为商家提供合同的创建,盖章等能力,为不同业务条线提供合同的定制,归档,查询等功能。由于各个业务条线众多,为各个业务条线提供高可用查询能力是物流合约中心重中之重。同时计费系统在每个物流单结算时,都需要查询合......
  • Java实现读取Excel文件并逐行写入到新的Excel文件中
    在日常开发中,经常需要处理Excel文件,其中一种常见的需求是将原始Excel文件的内容逐行写入到新的Excel文件中或者写入数据中。本篇博客将介绍使用Java编程语言以及ApachePOI库来实现这一功能。ApachePOI是一个开源的Java库,用于处理MicrosoftOffice格式的文件,包括Excel。1.环境......
  • javase学习文档
      javase学习文档(更新)javase学习文档已更新查看地址:https://talentestors.gitee.io/my-notes/codenotes/javase/......
  • 脏读不可重复读幻读;qps、tps、并发量、pv、uv;接口幂等性问题如何解决
    脏读不可重复读幻读;qps、tps、并发量、pv、uv;接口幂等性问题如何解决脏读不可重复读幻读脏读脏读指的是一个事务在读取了另一个事务未提交的数据后,后续操作中,另一个事务发生了回滚(Rollback),导致读取到的数据实际上是无效的。这就像读取了一份尚未确认是否有效的数据,如果最终该事......
  • Java导入、导出excel
    Excel是由四个元素组成的分别是:WorkBook(工作簿)、Sheet(工作表)、Row(行)、Cell(单元格),其中包含关系是从左至右,一个WorkBook可以包含多个Sheet,一个Sheet又是由多个Row组成,一个Row是由多个Cell组成。1.1创建Excel的元素1)创建WokrBookWorkbook workbook = new XSSFWorkboo......
  • Java学习-1
    今天学了点Java构建最小栈的方法,采用的是链表存储其中的最小值以及当前节点的数值,在插入栈内新元素的时候进行对应的最小值比对,插入到private链表中。classListNode{publicintval;publicintmin;publicListNodenext;publicListNode(intval,intmin......
  • #yyds干货盘点#Java虚拟机基本结构
    类加载子系统类加载子系统负责从文件系统或网络中加载Class信息,加载的类的数据结构存放于一块叫方法区的内存空间中。方法区方法区主要存储类加载后的数据结构信息、运行时常量池信息、字符串、数字常量(这部分常量信息是Class文件中常量池部分的内存映射)(JDK1.7之前,JDK1.7之后字符......
  • 视频直播网站源码,前端效果-css+javascript
    视频直播网站源码,前端效果-css+javascript <!DOCTYPEhtml><html><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="w......