美文网首页
Synchronized的底层原理

Synchronized的底层原理

作者: 香瓜会飞 | 来源:发表于2019-08-06 09:45 被阅读0次

在代码块中,如果使用的syunchronized关键字的话,那么他的字节码文件中就会有两个指令: monitorenter(监视器输入)和monitorexit(监视器退出);

monitorenter:每一个对象都有一个监视器锁(monitor),当monitor锁被占用时,对象就会处于锁定状态,线程执行monitorenter  指令就是尝试获取monitor的所有权。

三种情况:

    当monitor的进入数为 0 时, 该线程进入monitor,并设置进入数为 1 ,该线程就是monitor的所有者  

    如果该线程为monitor的所有者,只是重新进入,则进入monitor的进入数加  1  

    如果monitor被其他线程占用了,该线程进入阻塞状态,直到monitor进入数为 0 时,该线程在重新尝试获取monitor的所有权

monitor exit(监视器退出): 执行该指令的线程必须是object ref 所对应的monitor的所有者,

    monitor exit 指令执行时,monitor的进入数减一,如果monitor的进入数为 0 时,那么该线程退出monitor,其他被monitor阻塞的线程尝试获取monitor

    一个monitorenter对应一个montorenter。    但在字节码中有两个monitorexit  ,这是因为如果在执行同步锁的同时出现了异常的话,就会跳过第一个monitorexit  (释放锁),为了保证锁的释放就会执行第二个monitorexit 。

相关文章

网友评论

      本文标题:Synchronized的底层原理

      本文链接:https://www.haomeiwen.com/subject/ngundctx.html