スレッドを書いたところ、実行に時間がかかりすぎて完全に完了していないようです。スレッドを優雅に止めたい。何か助け?
これを行うには、次のように、スレッドのを変数で保護し、停止するときに外部から設定するのが適切です。run()
boolean
true
class MyThread extends Thread
{
volatile boolean finished = false;
public void stopMe()
{
finished = true;
}
public void run()
{
while (!finished)
{
//do dirty work
}
}
}
むかしむかしstop()
方法が存在しましたが、ドキュメントが述べているように
この方法は本質的に安全ではありません。Thread.stopでスレッドを停止すると、そのスレッドがロックしているすべてのモニターのロックが解除されます(チェックされていないThreadDeath例外がスタックを伝播することによる自然な結果として)。これらのモニターによって以前に保護されていたオブジェクトのいずれかが不整合な状態であった場合、損傷したオブジェクトは他のスレッドから見えるようになり、潜在的に任意の動作を引き起こす可能性があります。
だからガードが必要だ。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加