next up previous
Next: 15 Starvationと Deadlock Up: 14 待ちと通知のメソッド Previous: 14.2 通知メソッドnotifyAll, notify

14.3 waitセット

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日