浅谈同步方法与同步代码块的区别
创始人
2024-07-24 05:01:34
0

当JVM执行一个方法时,执行中的线程识别该方法的method_info结构是否有ACC_SYNCHRONIZED标记设置,然后它自动获取对象的锁,调用方法,最后释放锁。如果有异常发生,线程自动释放锁。

同步化一个方法块会超过JVM对获取对象锁和异常处理的内置支持,要求以字节代码显式写入功能。如果使用同步方法读取一个方法的字节代码,就会看到有十几个额外的操作用于管理这个功能。

Java代码

  1. public class Sync {     
  2.     private int i;     
  3.     
  4.     public synchronized int synchronizedMethodGet() {     
  5.         return i;     
  6.     }     
  7.     
  8.     public int synchronizedBlockGet() {     
  9.         synchronized( this ) {     
  10.             return i;     
  11.         }     
  12.     }     
  13.     
  14. }   

 

反编译出的字节码:

Java代码

  1. D:\Java\jdk1.6.0_02\bin>javap -c Sync     
  2. Compiled from "Sync.java"    
  3.     
  4. public class Sync extends java.lang.Object{     
  5. public Sync();     
  6.   Code:     
  7.    0:   aload_0     
  8.    1:   invokespecial   #1; //Method java/lang/Object."":()V     
  9.    4:   return    
  10.     
  11. public synchronized int synchronizedMethodGet();     
  12.   Code:     
  13.    0:   aload_0     
  14.    1:   getfield        #2; //Field i:I     
  15.    4:   ireturn     
  16.     
  17. public int synchronizedBlockGet();     
  18.   Code:     
  19.    0:   aload_0     
  20.    1:   dup     
  21.    2:   astore_1     
  22.    3:   monitorenter     
  23.    4:   aload_0     
  24.    5:   getfield        #2; //Field i:I     
  25.    8:   aload_1     
  26.    9:   monitorexit     
  27.    10:  ireturn     
  28.    11:  astore_2     
  29.    12:  aload_1     
  30.    13:  monitorexit     
  31.    14:  aload_2     
  32.    15:  athrow     
  33.   Exception table:     
  34.    from   to  target type     
  35.      4    10    11   any     
  36.     11    14    11   any     
  37.     
  38. }  

原文链接:http://wen866595.javaeye.com/blog/974851

【编辑推荐】

  1. Java线程同步的优先级介绍
  2. Java线程同步问题在实践中寻找答案
  3. Java线程同步引用基本代码介绍
  4. Java线程同步如何才能排除阻塞
  5. Java线程同步锁解决共享数据安全

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...