码迷,mamicode.com
首页 > 其他好文 > 详细

synchronized 底层实现原理

时间:2021-04-30 11:53:50      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:图片   底层实现   tor   获取   方法   可重入   就会   zed   monitor   

  Synchronized的语义底层是通过一个monitor(监视器锁)的对象来完成。

  每个对象有一个监视器锁(monitor)。每个Synchronized修饰过的代码当它的monitor被占用时就会处于锁定状态并且尝试获取monitor的所有权 ,过程:

  1)如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者;

  2)如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1(可重入);

  3)如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有权。

  

  此处最好结合 java对象在内存中的布局来看。直接上图:

  技术图片

  monitor对象存在于每个Java对象的对象头中(存储的是指针),synchronized锁便是通过这种方式获取锁的,也是为什么Java中任意对象可以作为锁的原因,同时也是notify/notifyAll/wait等方法存在于顶级对象Object中的原因。

  

  

synchronized 底层实现原理

标签:图片   底层实现   tor   获取   方法   可重入   就会   zed   monitor   

原文地址:https://www.cnblogs.com/gxl666/p/14717245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!