關(guān)于sync關(guān)鍵字的monitor

線程使用的時候經(jīng)常會看到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的讀起來比較晦澀,所以總結(jié)了下之前學(xué)習(xí)看到過的一些結(jié)論。
對象中的_EntryList類似AQS中的等待隊列,_WaitSet存放調(diào)用了wait()函數(shù)的線程,當一個object.wait()后會將改object從_EntryList中移到_WaitSet中,等待notify()后再放入_EntryList中,這也證明了notify只會隨機喚醒一個線程。
以上是目前一些理解,等有機會再深入更新
——————————————————————————————
補充:終于找到大神的博客解釋,我覺得把wait講解的很清楚了:
https://blog.csdn.net/java_lyvee/article/details/110996764

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容