关于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

你可能感兴趣的:(关于sync关键字的monitor)