synchronized线程锁的底层实现机制,附加强大的javap命令

开始说

分布式和多线程很重要,哈哈。至于多线程开发这一块儿,应用自己没任何问题  可是问到了底层的技术实现,当时尬了。故将自己这两天对同步锁的底层实现方式进行一下探秘。

javap 命令

这是我的是linux桌面系统 ubuntu 16.04 

直接上命令

当然这里不得不提一下java命令与javac 命令

javac 用来编译咱们写的xxx.java 文件 java 用来执行javac 编译后的 xxx.class 

synchronized线程锁的底层实现机制,附加强大的javap命令_第1张图片
javap 参数

以上是 javap 所有的option 

本次我们用到的是-c 也就是要反编译我的代码 哈哈 这是一种非常有效的方式 看看平时写的代码被反编译后的样子吧!

伪代码如下

public classInstance {

protected  voidtest(){

//同步代码块

synchronized(this) {

doSomething();

}

}

private voiddoSomething(){

// write your service

}

}


以上代码被反编译后:


synchronized线程锁的底层实现机制,附加强大的javap命令_第2张图片
反编译

我顶定义 test() 中定义的同步代码块 反编译后 出现了monitor 分别有个enter 与 exit  

当前线程进来时有个标志 出去时去掉标志 这个标志唯一,谁有这个标志代表谁获得了进入权限

继续挖掘

第一个 aload_0 装载第一个引用的对象

第二个 aload_0 守护monitor 进入montior 时 montior进入数为1,其他线程只能等待知道进入数为0

goto 正常完成了这个方法

第二个monitorexit 为了确保当前线程离开monitor

小结

结合操作系统的知识,synchonized机制与线程锁的实现原理都是一样的,底层都是通过类似于montiorLock的实现方式。

当然强大的Lock 的掌握以及网络IO 的掌握将更有利于我们开发或者阅读java中间件。

你可能感兴趣的:(synchronized线程锁的底层实现机制,附加强大的javap命令)