Next: 15 Starvationと Deadlock
Up: 14 待ちと通知のメソッド
Previous: 14.2 通知メソッドnotifyAll, notify
wait(),notify(),notifyAll()の挙動を理解するためには,waitセットに
ついて知っておく必要がある.
オブジェクトにwaitメソッドが送られるとそのオブジェクトのwaitセットに
そのスレッドが入れられる.waitメソッドを受け付けるオブジェクトは
すべてwaitセットを持っている.
ひとつのオブジェクトに複数のスレッドからwaitがかかると,それら全部が
そのオブジェクトのwaitセットに入れられる.
waitセットの中に入っている状態からスレッドを取り出す方法として
notifyとnotifyAllがある.notifyは,waitセットの中から適当に
1つのスレッドが選ばれてそのスレッドが実行可能状態へ移る.
notifyAllは,waitセットの中のすべてのスレッドを実行可能状態へ
移すことを行う.
notifyの場合に,waitセットの中からどのスレッドを選ぶかについては
決まったルールがあるわけではなく,そのためnotifyの取り扱い
には注意が必要となる.
waitがタイムアウトした場合にもwaitセットからスレッドが実行可能状態へ移り,
interruptメソッドが送られた場合にもwaitセットから取り出される.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日