マルチスレッドプログラミング 4章 スレッドの制御
- 4.1. 優先度の設定
- 4.2. スレッドの休止・中断
- 4.3. 推奨されないメソッド
- 4.4. スレッドを停止させるには
4.3. 推奨されないメソッド
Threadクラスには、現在では使用が推奨されていないメソッドがいくつかあります。原則としてこれらのメソッドを使用してはいけません。
stop()
スレッドを強制的に停止させるメソッドです。スレッドがどのような状態にあってもスレッドを停止させるため、そのスレッドが操作中のオブジェクトのデータに不整合が生じるおそれがあります。
suspend()
スレッドを直ちに中断させるメソッドです。中断されたメソッドは次のresume()メソッドによって再開されます。suspendメソッドは、スレッドが取得しているロックを解放しないため、デッドロックの原因となりやすいという問題があります。
なお、デッドロックとは、複数のスレッドがオブジェクトのロックを確保できない状態で処理が進まなくなってしまう状態のことをいいます。たとえば、スレッド1がオブジェクトAのロックを確保し、スレッド2がオブジェクトBのロックを確保している状態を考えます。このとき、スレッド1がさらにBのロックを要求し、スレッド2がAのロックを要求すると、AとBのロックは絶対に解放されない状態となります。このような状態をデッドロックといいます。
resume()
suspendメソッドによって中断されているスレッドの動作を再開するメソッドです。suspendメソッドを使用しなければ、resumeメソッドを使用することもありません。