Eclipse 4.4ではじめる Javaプログラミング入門 Eclipse 4.4 Luna対応

グラフィック・ファイルアクセス・スレッド・日付/テキスト処理 - マルチスレッドについて

Icon comment count 0
Icon stock count 0

4.3.3スレッドの一時停止と再開

先のサンプルでは、繰り返し部分をwhile(!kiss_of_death)としてありますが、これはkiss_of_deathをtrueにすれば繰り返しを抜けて処理を終了できるようにする措置です。runメソッドを終了すると、そのスレッドは解放され、なくなります。ここでは特にスレッドの終了は行っていませんが、このようにすれば外部から変数の値を変更することで自然にスレッドを終わらせることが可能です。

ThreadおよびRunnableには一応スレッド終了のメソッドはあったのですが、デッドロック(複数のスレッドが相手をブロックし合い、処理が完全に停止してしまうこと)を起こす可能性があり、現在は使用されていません。従って、終了の処理は、この例のように外部から繰り返しを抜けるような形で行うようにしてください。また再開は、新たにスレッドを用意してstartします。この方法が、最も安全でかつ簡単でしょう。

waitメソッドによる一時停止

ただし、一度スレッドを終了させてまた新たに作り直すということになると、スレッドのインスタンスはすべて初期状態に戻ってしまいます。完全にスレッドを終了するのではなく、一時的に停止したり再開させる場合には、この方法は不便です。このような場合には、waitというメソッドを使いスレッドを一時停止の状態にすることができます。waitにより一時停止されたスレッドは、その後notify

コメント

    コメントはありません