syncキーワードのmonitorについて
1088 ワード
スレッドを使用すると、IllegalMonitorStateExceptionの例外がよく見られます.では、Monitorはオブジェクトがインスタンス化されると、jvmがオブジェクトにObjectMonitorオブジェクトを生成し、objectMonitorを開きます.hppヘッダファイル:
具体的なコードは読んだことがありませんが、cの読みが苦手なので、前に勉強して見た結論をまとめました.オブジェクトの_EntryListはAQSの待ち行列に似ています.WaitSetはwait()関数を呼び出したスレッドをobjectとして格納する.wait()後にobjectを変更します_EntryListで_に移動WaitSetでは、notify()を待ってから入れます_EntryListでは、notifyがランダムにスレッドを起動するだけであることも証明されています.以上は今のところいくつかの理解で、机会があればもっと深く更新します————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————https://blog.csdn.net/java_lyvee/article/details/110996764
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