美文网首页
关于sync关键字的monitor

关于sync关键字的monitor

作者: 三斤牛肉 | 来源:发表于2021-01-11 12:23 被阅读0次

    线程使用的时候经常会看到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

          本文链接:https://www.haomeiwen.com/subject/wutdaktx.html