关于sync关键字的monitor

线程使用的时候经常会看到IllegalMonitorStateException异常,那么Monitor究竟是什么
当对象被实例化的时候,jvm会给该对象生成一个ObjectMonitor对象,打开objectMonitor.hpp头文件:

ObjectMonitor() {
    _header       = NULL;
    _count        = 0;
    _waiters      = 0,
    _recursions   = 0;
    _object       = NULL;
    _owner        = NULL;
    _WaitSet      = NULL;
    _WaitSetLock  = 0 ;
    _Responsible  = NULL ;
    _succ         = NULL ;
    _cxq          = NULL ;
    FreeNext      = NULL ;
    _EntryList    = NULL ;
    _SpinFreq     = 0 ;
    _SpinClock    = 0 ;
    OwnerIsThread = 0 ;
  }

具体代码没有读过,因为是c的读起来比较晦涩,所以总结了下之前学习看到过的一些结论。
对象中的_EntryList类似AQS中的等待队列,_WaitSet存放调用了wait()函数的线程,当一个object.wait()后会将改object从_EntryList中移到_WaitSet中,等待notify()后再放入_EntryList中,这也证明了notify只会随机唤醒一个线程。
以上是目前一些理解,等有机会再深入更新
——————————————————————————————
补充:终于找到大神的博客解释,我觉得把wait讲解的很清楚了:
https://blog.csdn.net/java_lyvee/article/details/110996764

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容