5

重複の可能性:
Java でスレッドを強制終了するにはどうすればよいですか?
Javaでスレッドを開始/停止/再開する方法は?

Thread次の機能があります。

  • destroy()
  • stop()
  • suspend()

しかし、それらはすべて非推奨です。
スレッドを停止するには何を使用しますか?

4

6 に答える 6

4

想定どおりに実行/終了することを確認する必要があります。

説明については、これを確認してください。

于 2012-10-21T07:24:04.530 に答える
3

ブール値フラグを使用してスレッドを停止できます。また、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を確認してください。

于 2012-10-21T07:24:56.613 に答える
2

次のようにできます。

private boolean running = true;

public void stop () {
    running = false;
}    

public void run () {
    while (running) { 
        //your code goes here
    }
}

これは、run-method を簡単に終了させる簡単な方法です。

于 2012-10-21T07:26:53.570 に答える
2

あなたは彼にその仕事を終わらせるよう丁寧に頼みます. スレッドは適切に動作する必要があり、要求されたときに作業を終了する必要があります。

Thread.interrupt()どちらを使用してスローするかInterruptedException(スレッドが待機している場合)、またはスレッドにフラグを設定するか (待機していない場合) を尋ねます。

スレッドは、キャッチしたときにその作業を終了する必要があります。InterruptExceptionまたは、(スリープ/待機なしで) 長い作業を行う場合は、中断されたかどうかを時々チェックし、中断された場合は終了する必要があります。

于 2012-10-21T07:27:04.607 に答える
0

スレッドは、その作業を行うために実行されます。やるべきことがもっとあるかどうかは、それ自体が判断する必要があります。作業中のスレッドを停止したい場合、これはスレッドが作業が存在すると考えているが、スレッドにそれを実行させたくないことを意味します。これは間違いなく設計上の問題です。適切に設計された問題では、スレッドを停止/再開する必要はありません。

于 2012-10-21T07:44:32.890 に答える
0

あなたが言及した方法は、一度使用するとシステムが不安定な状態になる可能性があるため、推奨されていません。これは、プロセスを強制終了するのと同じです。これらのメソッドを使用しても、スレッドが正常に終了する機会はありません。

結論として、実装している各スレッドは、正常に終了するための独自のメカニズムを持つ必要があります。通常、次のことを行います。booleanデフォルトであるフラグexitを作成falseします。スレッドのrun()メソッドは、次のようなループを実装する必要があります。

while (!exit) {
    // do the job
}

exit()このフラグを に変えるメソッドを追加して、メソッドが外部から呼び出されると、スレッドは次の反復でループtrueを離れます。while終了時にリソースなどを閉じることに注意する必要があります。

明らかに、singを送ることでメカニズムを改善できます

于 2012-10-21T07:31:25.913 に答える