亮,有一计

文章 分类 评论
59 17 13

站点介绍

这是一个热爱和别人一起交流学习的程序员所建立的个人博客 欢迎大家交流讨论

java"锁事" 之锁底层原理详解

liang 2022-06-23 854 0条评论 java锁juc多线程编码学习 juc

首页 / 正文
本站的文章若无特殊标明转载的话均为原创,有些文章在我的csdn个人站也有,两者基本上是同步的 博客地址

发布于2022-07-08

synchronized底层字节码实现

同步代码块

同步代码块实现使用的是monitorentermonitorexit命令 进行进入和退出(退出命令会有多条 以防止程序抛出异常的时候锁无法进行释放)
代码示例:

 Code:
       0: aload_0
       1: getfield      #3                  // Field object:Ljava/lang/Object;
       4: dup
       5: astore_1
       6: monitorenter
       7: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
      10: ldc           #5                  // String --------hello
      12: invokevirtual #6                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      15: aload_1
      16: monitorexit
      17: goto          25
      20: astore_2
      21: aload_1
      22: monitorexit
      23: aload_2
      24: athrow
      25: return

普通同步方法

普通同步方法使用的是同步标识ACC_SYNCHRONIZED进行方法的标明

调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置.如果设置了,执行线程会将先持有monitor然后在执行方法,最后在方法完成(或者是抛出异常)时释放monitor

代码示例:

public synchronized void m2();
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=0, locals=1, args_size=1
         0: return
      LineNumberTable:
        line 14: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       1     0  this   Ljuc/lock/LockByteCodeDemo;

静态同步方法

静态同步方法ACC_STATIC, ACC_SYNCHRONIZED 两个访问标志标识该方法是静态同步方法

代码示例:

public static synchronized void m2();
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=0, locals=0, args_size=0
         0: return
      LineNumberTable:
        line 18: 0

synchronized到底锁的是什么(是管程)

为什么每个对象都可以有锁

因为Java所有类的基类就是 Object类 Object类在jdk源码的c++文件中有对象ObjectMonitor 这个对象有一些属性值记录了当前持有对象锁的线程和一些其他属性 是通过基类的c++对象代码去扩展的这个锁属性 每个对象都天生带着一个对象监视器
重要属性示意图如下:

synchronized的jvm实现

synchronized必须作用于某个对象中 所以Java在对象的头文件存储了锁的相关信息. 锁升级功能主要依赖于MarkWord中的锁标志位和释放偏向锁标志位.
示例图如下

评论(0)

热门文章

最新评论

  • nederland drakt

    Natalieay fotballdrakter LoganBisc MarshaGop brasil VM Drakt RobinMulv AlizaBeeb mexico VM tröja PhilippDo Kenbahpg real madrid trøjer ManieRabi EleanorLy VM fotbollstrojör VM BernardoE AguedaDun maglia atalanta 2023 CornellSi BeatrisAt coutinho drakt barn Jonnautxv ShelleyFa manchester united tøj PenelopeV DaltonPoi frankrike VM Drakt Linwoodil UlrikeMej fotballdrakter AmyPanton OsvaldoRi arsenal trøje RichieBon GaleLower chelsea drakt FlynnChun CarmeloWi Maglia Chile Mondiali 2022 RosaPanne MabelWind leeds drakt GlindaSer MariaStol maglia italia portiere Beulahyxy SusieMich marseille tröja TraceyMew AguedaDun maglia atalanta 2023 CornellSi CheriRoth arsenal trøje MonteBall Lashawnda manchester united tröja barn GarryKerr Torstenib Kroatien VM 2022 Landsholdstrøje ArielleHa

  • sites

    Ramonitah albanien VM Drakt SteveCawt CaraCastl Maglia Brazil Mondiali 2022 BellaMoul DedraHjee osterrike VM Drakt WoodrowSt EmeryStac Maglia Mexico Mondiali 2022 JaredWess CaraCastl Maglia Brazil Mondiali 2022 BellaMoul OdellWayl psg trøje børn HalinaDup Raymundoq nigeria VM 2022 Drakt Demetrius CathrynHw VM fotbollstrojör VM Maximoffd BeulahMer real madrid fodboldtøj BreannaHo WilsonmtF sydkorea VM tröja DZIEmely CrystalDr maglia manchester united 2023 BarbaraIv AltaLawle maglie svizzera ChiSatter MariaTrap kroatia VM 2022 Drakt AudraSumm NicoleDos polen VM tröja JosefamgH ToniaciY Maglia Slovenia Mondiali 2022 LudieCunn MerrillRe OLKTreydx PrestonBo juventus trøje børn DelBloomf Hannelore psg tröjor LloydFais Temekazlr Maglia Slovenia Mondiali 2022 Rebbecacs StewartBl Maglia Belarus Mondiali 2022 Alexandra

  • liang

    你大概是什么步骤能描述一下吗?设置了nginx的静态链接了吗?

  • manchester united tøj

    Araofclmh australia vm barn Drakt KaseyTls Kristieif real madrid drakt ThadHilly RhysHorns liverpool tröja barn DedraNett AlissaGal Maglia Chile Mondiali 2022 MilanFait OnitaSass chelsea drakt AlannahEa NaomiLev liverpool tröja barn JuanTregu AdrieneBe Brasilien VM 2022 Landsholdstrøje MilfordNe SimonJsh maglie napoli 2022 JuliaLayt EzraPouli marseille tröja LinoldDi JannieSpr chelsea matchtröja GlendaMes CraigTasm Atalanta Drakt LenaBella LashondaB Maglia Armenia Mondiali 2022 JermaineE RicoLeona danmark VM tröja Shananwsw Gildaohft VM fotbollstrojör VM CaryBrans TrenavcZ Portugal VM 2022 Landsholdstrøje JewelJano Jacquetta Island VM 2022 Landsholdstrøje FreyaYdyr TobiasHer Portugal VM 2022 Landsholdstrøje AzucenaVe BeatriceV australia VM 2022 Drakt VeronaTul MoseButtr Maglia Wales Mondiali 2022 StacyHytt TobiasHer Portugal VM 2022 Landsholdstrøje AzucenaVe

  • Hello Word !

    我发现我的评论功能,加载不了头像!朋友圈和相册也加载不了,音乐播放器也不显示,求解!

日历

2023年03月

   1234
567891011
12131415161718
19202122232425
262728293031 

友情链接

文章目录

推荐关键字: 学习资料 算法

站点公告
本站的文章若无特殊标明转载的话均为原创,有些文章在我的csdn个人站也有,两者基本上是同步的 博客地址
点击小铃铛关闭