public class ThreadTest {
public static void main(String[] args) throws InterruptedException {
CounterThread ct = new CounterThread();
ct.setDaemon(true);
ct.start();
ct.join(2);
System.out.println("interrupt status: " + ct.getState()); // key sentence
if (ct.isAlive()) {
System.out.println("start interrupt");
ct.interrupt();
}
System.out.println("result: " + ct.getResult());
}
}
class CounterThread extends Thread {
private int result;
public int getResult() {
return result;
}
public void run() {
for (int i = 0; i < 999999999; i++) {
if (i == 999999998) {
result = 5;
System.out.println("calculate finished");
}
if (Thread.interrupted()) {
result = -1;
System.out.println("receive interrupt signal");
return;
}
}
}
}
我使用上面的代碼來測試java中斷機制。當我註釋掉打印語句Java中的線程中斷不可重複的結果
System.out.println(「interrupt status:」+ ct.getState());
結果總是一樣的:
開始中斷 接收中斷信號 結果:
雖然我離開它的代碼,結果是不可重複-1。該結果可能是:
中斷狀態:RUNNABLE 開始中斷 結果:-1 接收中斷信號
或者:
中斷狀態:RUNNABLE 開始中斷 結果:0 接收中斷信號
想不明原因,請幫忙。謝謝。
感謝兄弟,這對我來說非常清楚。 – awkejiang