notify
と で飢餓を解決する方法はnotifyall
?
4 つのスレッドがあり、同じ obj でロックを取得するのを待っていて、現在のスレッドが呼び出す場合notify()
JVM は任意の 1 つのスレッドを選択します。を呼び出したスレッドはnotify()
、JVM によって再び選択される可能性がnotify()
あります。
これは、スレッドの 1 つが他のスレッドよりも多く呼び出された場合に飢餓の問題を引き起こす可能性があります。
ここでは、すべてのスレッドの優先度が同じであると想定しています。スレッドの優先度が異なる場合、最も優先度の高いスレッドが選択されると思いますnotify()
また、同じ問題が発生する可能性notifyall()
があります。どのスレッドが選択されるかわからない場所だと思います。