重複の可能性:
Java でスレッドを強制終了するにはどうすればよいですか?
Javaでスレッドを開始/停止/再開する方法は?
Thread
次の機能があります。
destroy()
stop()
suspend()
しかし、それらはすべて非推奨です。
スレッドを停止するには何を使用しますか?
重複の可能性:
Java でスレッドを強制終了するにはどうすればよいですか?
Javaでスレッドを開始/停止/再開する方法は?
Thread
次の機能があります。
destroy()
stop()
suspend()
しかし、それらはすべて非推奨です。
スレッドを停止するには何を使用しますか?
想定どおりに実行/終了することを確認する必要があります。
説明については、これを確認してください。
ブール値フラグを使用してスレッドを停止できます。また、Thread.isInterrupted()を使用して、スレッドが中断されたかどうかを確認し、ブール値フラグと同じように残りの作業を無視することもできます。
class Worker implements Runnable {
private volatile boolean shouldRun = true;
@Override
public void run() {
while (shouldRun) {
// your code here
}
}
public void cancel()
{
shouldRun = false;
}
}
これらの関数が非推奨になった理由を知りたい場合は、Java Thread Primitive Deprecationを確認してください。
次のようにできます。
private boolean running = true;
public void stop () {
running = false;
}
public void run () {
while (running) {
//your code goes here
}
}
これは、run-method を簡単に終了させる簡単な方法です。
あなたは彼にその仕事を終わらせるよう丁寧に頼みます. スレッドは適切に動作する必要があり、要求されたときに作業を終了する必要があります。
Thread.interrupt()
どちらを使用してスローするかInterruptedException
(スレッドが待機している場合)、またはスレッドにフラグを設定するか (待機していない場合) を尋ねます。
スレッドは、キャッチしたときにその作業を終了する必要があります。InterruptException
または、(スリープ/待機なしで) 長い作業を行う場合は、中断されたかどうかを時々チェックし、中断された場合は終了する必要があります。
スレッドは、その作業を行うために実行されます。やるべきことがもっとあるかどうかは、それ自体が判断する必要があります。作業中のスレッドを停止したい場合、これはスレッドが作業が存在すると考えているが、スレッドにそれを実行させたくないことを意味します。これは間違いなく設計上の問題です。適切に設計された問題では、スレッドを停止/再開する必要はありません。
あなたが言及した方法は、一度使用するとシステムが不安定な状態になる可能性があるため、推奨されていません。これは、プロセスを強制終了するのと同じです。これらのメソッドを使用しても、スレッドが正常に終了する機会はありません。
結論として、実装している各スレッドは、正常に終了するための独自のメカニズムを持つ必要があります。通常、次のことを行います。boolean
デフォルトであるフラグexit
を作成false
します。スレッドのrun()
メソッドは、次のようなループを実装する必要があります。
while (!exit) {
// do the job
}
exit()
このフラグを に変えるメソッドを追加して、メソッドが外部から呼び出されると、スレッドは次の反復でループtrue
を離れます。while
終了時にリソースなどを閉じることに注意する必要があります。
明らかに、singを送ることでメカニズムを改善できます