スレッドが中断する
昨日テストスレッドが中断しました...コードは次のとおりです.
予期せぬ結果が常に現れる....エラーメッセージが印刷されていないためである.その後、フォーラムの兄弟たちに注意され、jdkを見てみると、Objectクラスのwait()、wait(long)またはwait(long, int)メソッドを呼び出すとき、またはjoin()、join(long)、join(long, int)、sleep(long)またはsleep(long, int)メソッドを呼び出すときにスレッドがブロックされると、その中断状態は消去され、InterruptedExceptionも受信されることが分かった.
public class Main extends Thread {
@Override
public void run() {
while(!this.isInterrupted()){
System.out.println("the thread is run ...");
try {
TimeUnit.SECONDS.sleep(1L);
} catch (InterruptedException e) {
e.printStackTrace(); // , ignore
}
}
}
public void goOn(){
Main.interrupted();
if(!this.isInterrupted()){
run();
}
}
public static void main(String[] args) throws InterruptedException{
Main td = new Main();
System.out.println("``````````````````````````````````````");
td.start();
TimeUnit.SECONDS.sleep(2L);
System.out.println("use interrupt()...");
td.interrupt(); // ... ?
TimeUnit.SECONDS.sleep(4L);
System.out.println("use goOn()...");
td.goOn();
}
}
予期せぬ結果が常に現れる....エラーメッセージが印刷されていないためである.その後、フォーラムの兄弟たちに注意され、jdkを見てみると、Objectクラスのwait()、wait(long)またはwait(long, int)メソッドを呼び出すとき、またはjoin()、join(long)、join(long, int)、sleep(long)またはsleep(long, int)メソッドを呼び出すときにスレッドがブロックされると、その中断状態は消去され、InterruptedExceptionも受信されることが分かった.