编程语言
首页 > 编程语言> > Object.wait和monitor源码

Object.wait和monitor源码

作者:互联网

面试被问到了wait和sleep区别,才知道这种使用场景完全不同的东西还能问区别…不过,确实没看过这俩的源码,来看一下。

解释器映射op的过程

我这里看的是art源码,而非jvm源码。本人对bytecode到真正执行代码的映射暂无认知,经高人指点是所有的解释器实现是在interpreter目录中。

入口是interpreter.cpp#EnterInterpreterFromInvoke -> Execute -> ExecuteSwitch -> interpreter_switch_impl.h#ExecuteSwitchImpl -> ExecuteSwitchImplAsm 断到汇编里了…后面部分是猜的-> interpreter_switch_impl-inl.h#OP_NAME(见list

Monitor enter和exit

这个是基础,因为wait必须在monitor保护下。monitor相关的背景知识

monitor#enter

interpreter_switch_impl-inl.h#MONITOR_ENTER -> 这里会把寄存器里的对象拿出来,传给interpreter_common.h#DoMonitorEnter -> object-inl.h#MonitorEnter -> monitor.cc#MonitorEnter

monitor#InflateThinLocked

Object#wait

仍然是走到了Monitor#wait,整体就是一个线程等待队列,类似于AQS,核心是AppendToWaitSet和RemoveFromWaitSet。

标签:Monitor,lock,Object,源码,interpreter,wait,monitor
来源: https://blog.csdn.net/pouloghost/article/details/121787718