next up previous
Next: 16.8 優先順位 Up: 16 スレッドのスケジューリング Previous: 16.6 スレッドの終了待ち joinメソッド

16.7 ブロックの原因

スレッドがブロックされた状態に入る理由には以下の5つがある.
  1. sleep(milliseconds)によってスレッドをスリープさせた場合.引数で指定さ れた時間だけスレッドは実行されない.
  2. suspend()によってスレッドの実行を一時休止させた場合.このメソッド はresume()メッセージを受け取るまでは実行可能とならない. Java2では,suspendもresumeも推奨されないメソッドとなっています.
  3. wait()によってスレッドの実行を一時休止させた場合.このスレッドは notify(), notifyAll()メッセージを受けるまでは実行可能とならない. waitは,それが呼ばれて一旦休止する際にロックを解除するところが, sleep, suspendとは違うところです.これにより,wait()が実行されて いる間に,他のsynchronizedメソッドを呼び出すことができることになり ます.
  4. I/O(入出力)が完了するのを待つ場合.
  5. synchronizedメソッドを呼び出そうとしたがそのオブジェクトがロックさ れていて使えない場合.


generated through LaTeX2HTML. M.Inaba 平成18年5月7日