2

runメソッドの内容をwhileループ内にラップして、スレッドを割り込み可能にするためにTHreadが割り込まれているかどうかをチェックするだけで十分ですか?

public void run () {
  while (!Thread.interrupted()) {
     do something.
  }    
}
4

2 に答える 2

2

スレッドはそれ自体の中断をどのようにサポートしますか?これは、現在何をしているかによって異なります。スレッドがInterruptedExceptionをスローするメソッドを頻繁に呼び出す場合、スレッドはその例外をキャッチした後、runメソッドから戻るだけです。

リファレンスドキュメント

たとえば、スレッドが作業の合間にスリープ状態になる場合は、キャッチすることをお勧めしますInterruptedException

public void run(){
 while(true)
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
        // We've been interrupted: no more messages.
        return;
    }
}

スレッドが長時間実行されている場合は、定期的にThread.interruptedを呼び出すことを確認できます。これは、割り込みが受信された場合にtrueを返します。

于 2013-02-21T09:00:50.120 に答える
0

Interrupted()は、現在のスレッドが中断されているかどうかを確認するための静的メソッドです。isInterrupted()は、呼び出されたThreadオブジェクトをチェックするためのインスタンスです。現在のスレッドの使用

if(!(Thread.interrupted())){//do something}

スレッドオブジェクトがuseと呼ばれるときif(myThread.isInterrupted()){//do something }

于 2013-02-21T09:12:45.927 に答える