通过openjdk源码分析ObjectMonitor底层实现

文章探讨了Java中的synchronized关键字底层实现,尤其是Monitor对象。作者引导读者在OpenJDK源代码中寻找ObjectMonitor.hpp和对应的.cpp文件,以理解等待集(WaitSet)、进入队列(_EntryList)等关键概念的实现细节,从而增进对并发编程的理解。
摘要由CSDN通过智能技术生成

在我们分析synchronized关键字底层信息时,其中谈到了Monitor对象,它是由C++来实现的,那,到底它长啥样呢?我们在编写同步代码时完全木有看到该对象的存在,所以这次打算真正来瞅一下它的真正面目,而对于这个Hospot代码JDK是并没有开源的,但是社区版本的JDK是开源了,在openjdk上可以阅读得到,所以下面先到openjdk上瞅一下:

所以点击后

 

点击

 

继续点击

 然后点击左侧browse

定位到这个路径

 

点击runtime

 

 其中我们想看到的Monitor对象的源代码就在其中,如下:

 其中.hpp是c++的头文件,其具体的实现是以cpp中,接下来就得打开它们来看我们想了解的东东了,是不是很刺激?对于上一次理论中提到了两个东东:

那咱们从源码中来看一下具体都表现为啥,首先先来看一下ObjectMonitor.hpp:

接下来就可以看到ObjectMonitor的类声明了:

 其实对就对应于:

 接下来挑里面的重点内容瞅一下:

接下来看一下它的成员变量:

那看一下_WaitSet的定义:

再看一下_EntryList的定义:

另外在理论中提到

 其实也在底层有定义,如下:

看一下他的定义

另外上理论中还提到了它:

其实也有对应

 继续来看其他的一个成员变量

 以及

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值