当前位置: 首页 > news >正文

synchronized+reentrantlock+CAS+AQS

sychronized

  • sychronized主要用来给同步方法和同步代码块进行加锁,保证多线程环境下的原子性,可见性和有序性
  • 在同步方法中会有一个ACC_SYCHRONIZED标志,如果有线程过来执行方法,就会先检查有没有这个表示,然后获得这个监视器锁,执行方法,再有线程过来的时候就无法获得这个监视器锁,进入阻塞状态。在同步代码块中,每个对象会维护一个被锁计数器,初始为0,线程来获得锁,使用monitorenter命令,计数器+1,Owner设置为当前线程,在执行monitorexit的时候就-1,当计数器为0的时候释放锁。

三大特性

  • 原子性:主要是依靠monitorenter和monitorexit命令,只有获得锁才能执行方法,哪怕这个方法时间很长,cpu时间片切换到其他线程,但是其他线程还是阻塞状态依旧执行不了,再次切回来的时候就继续执行方法,从而保证原子性
  • 有序性:因为在JVM会进行一个优化进行指令重排,解决方法一般都是想这个volatile禁止指令重排,但是这个synchronized是通过保证这个方法执行过程是单线程的,那么尽管这个方法过程可能会指令重排,但是我们这个单线程的结果是不会被这个过程影响的,所以能保证结果的有序性
  • 可见性:Java内存模型分为主内存以及每个线程私有的工作内存,synchronized在解锁的时候,会把变量同步到主内存中,这样后续访问的线程就可以拿到修改的值了

锁升级

  • 无锁
  • 偏向锁:锁会偏向于第一个获取他的线程,会在MarkWord中存储这个线程的ID,下线程会和这个ID进行比较,相同则直接获取锁,不相同升级为轻量级锁。这个偏向锁在JDK15已经废除,因为纯线程持锁场景越来越少,维护成本超过收益
  • 轻量级锁:线程尝试获取锁的时候,JVM会在这个当前线程的栈帧中创建一个锁记录空间,然后把对象头中的Mark Word记录到这个锁记录中.JVM会尝试使用使用CAS操作把对象头中的Mark word更新为指向锁记录的指针,如果操作失败则悬挂
  • 重量级锁:当这个线程始终自旋没有成功的时候就会升级成重量级锁,后面的线程全部被阻塞。重量级锁会引起线程的阻塞和唤醒,CPU会在内核态和用户态来回切换,这个涉及到操作系统的调度,开销很大

锁优化

  • 锁膨胀:也就是锁升级的过程
  • 锁消除: 如果JVM检测不到一些代码被共享或者竞争,就有可能把这段代码的所属的同步锁消除掉,从而提高性能
  • 锁粗化: 把多个连续加锁解锁的操作连在一起形成一个更大范围的锁,就像一个人去银行办业务,就在一个大的窗口办完所有的业务,不需要反复去取号然后去多个窗口办理业务。而我们减小锁粒度主要强调不要在办理业务的窗口去做一些准备工作以及办理一些无关的业务。
  • 锁自旋: 自身循环尝试获取锁

实现可重入锁

  • 线程在获取这个锁之后,可能因为一些方法的调用,能够再次获取这个锁,就是锁的可重入,如果不支持可重入很有可能引发死锁问题
  • synchronized会有关联一个线程的ID和一个锁的状态status,这个线程持有锁之后就会+1,如果是可重入锁,重入的时候检查关联的id是不是自己的,如果是status再+1获得该所,每一次退出方法就-1,知道status值为0就释放该锁

AQS

  • AQS是这个java并发包下面的一个抽象同步框架,核心作用就是统一的封装了线程的等待,唤醒,排队机制,底层通过一个volatile关键词修饰一个state变量+FIFO的一个队列来实现线程安全的一个资源抢夺,state表示资源的状态,0表示未加锁,1表示已经上锁,线程要是抢不到锁就挂到队列里面排队,这个队列就是一个变体的CLH队列,用双向链表实现,AQS不负责加不加锁等细节,只负责处理排队的细节,怎么加锁怎么释放要实现类自己决定,

Reentrantlock和synchronized的比较

  • synchronized是java的一个内置特性,Reentrantlock是通过java代码实现的,他需要手动的获取锁释放锁,也是一个可重入锁,支持公平锁和非公平锁两种模式,有更加灵活的加锁机制,比如说可中断,超时获取锁,尝试获取锁等。

CAS

  • CAS是一种乐观锁技术,主要包含三个操作数:内存位置(V),预期值(A),新值(B)。在并发修改的时候会先比较A和V中取出来的值是否相等,如果相等就替换新值,会产生ABA问题
  • 非公平锁就是不按照这个申请顺序去获得锁,效率比较高,但是容易造成饥饿问题,而公平锁模式会严格按照FIFO顺序分配锁,但是性能会略微低一点
http://www.gsyq.cn/news/80557.html

相关文章:

  • 云电脑系列14:企业IT运维变简单:云电脑批量装软件、统一管安全、故障快恢复
  • 太阳能热水器优质生产商推荐,东莞美迪 - mypinpai
  • 递归泛型(Self-Type)Builder模式
  • 2025年网带式抛丸机生产商推荐,看看哪家的抛丸机精度高? - 工业品牌热点
  • 豆粉与小酥肉淀粉厂商怎么选?这些要点要知道 - mypinpai
  • 国内旅行社排名哪家比较推荐?精选口碑机构参考 - 品牌排行榜
  • 武强县农村自建房找谁好?河北衡水武强县自建房公司/机构深度评测口碑推荐榜 - 苏木2025
  • 云电脑系列12:设计师必备:云电脑流畅运行 PS/Pr/AE,还能优化性能
  • 北京口碑好的涉外离婚律师有哪些?这份参考值得关注 - 品牌排行榜
  • 想在藁城区农村盖房子,靠谱的自建房公司推荐。河北石家庄藁城区自建房公司/机构权威测评推荐排行榜。 - 苏木2025
  • 2025年中国砂光辊厂家推荐:看哪家技术实力强、产品质量优? - myqiye
  • 2025年全国抛丸机服务商排名,钢管抛丸机厂家/履带式抛丸机 - 工业品牌热点
  • 威榜单!2025年四川中药材种苗基地公司实力排名 - 朴素的承诺
  • 2025年上海继承律师权威精选榜单:离婚房产律所/婚姻律所/房产律所服务商推荐 - 品牌推荐官
  • 102302145 黄加鸿 数据采集与融合技术作业4
  • 想在沧县老家农村盖房子,靠谱的自建房公司口碑推荐。河北沧州沧县自建房公司 / 机构权威测评推荐排行榜 - 苏木2025
  • 医疗屏蔽房生产厂家哪家口碑好、实力强、信誉好? - 工业推荐榜
  • 2025PBT磨粉机厂家全攻略:深挖10家技术派服务商 - 栗子测评
  • 2025年郑州宠物美容学校排名TOP5权威推荐:甄选机构助力 - 工业品牌热点
  • 2025年上海婚姻律所权威推荐榜单:继承律所/房产律所/离婚事务所专业律师精选 - 品牌推荐官
  • 智谱免费模型
  • 2025年五大实力不错的美缝品牌企业推荐,诚信的美缝企业全解 - mypinpai
  • 2025年新疆电线电缆厂家权威推荐榜单:电线电缆/电缆价格/线缆源头厂家精选 - 品牌推荐官
  • 2025年中国五大磁导航专业厂家推荐:看哪家技术实力强? - 工业推荐榜
  • 2025年AI搜索排名服务公司推荐排行榜,AI搜索排名服务帮 - 工业品牌热点
  • 2025别墅入户门终极选购指南:十大品牌权威榜单揭晓 - 匠子网络
  • 实用指南:Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)
  • 2025驱动轮精品定制TOP5权威推荐:新型驱动轮靠谱厂家甄 - 工业推荐榜
  • 讲讲海泡石交货周期多久?哪家的交货速度快、品质优? - mypinpai
  • 2025上海离婚财产纠纷律师权威推荐榜单:离婚房产/遗嘱律师/婚姻律师源头服务商精选。 - 品牌推荐官