syncキーワードのmonitorについて

1088 ワード

スレッドを使用すると、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がランダムにスレッドを起動するだけであることも証明されています.以上は今のところいくつかの理解で、机会があればもっと深く更新します————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————https://blog.csdn.net/java_lyvee/article/details/110996764