public class RightWayInterrupted {
public static void main(String[] args) throws InterruptedException {
Thread threadOne = new Thread(new Runnable() {
@Override
public void run() {
for (; ; ) {
}
}
});
// 啓動線程
threadOne.start();
//設置中斷標誌
threadOne.interrupt();
//獲取中斷標誌
System.out.println("isInterrupted1: " + threadOne.isInterrupted() + "查詢的線程"+threadOne.getName());
//獲取中斷標誌並重置
System.out.println("isInterrupted2: " + threadOne.interrupted()+ "查詢的線程"+Thread.currentThread().getName());
//獲取中斷標誌並重直
System.out.println("isInterrupted3: " + Thread.interrupted()+ "查詢的線程"+Thread.currentThread().getName());
//獲取中斷標誌
System.out.println("isInterrupted4: " + threadOne.isInterrupted()+ "查詢的線程"+threadOne.getName());
Thread.currentThread().interrupt();
//獲取中斷標誌並重置
System.out.println("isInterrupted5: " + threadOne.interrupted()+ "查詢的線程"+Thread.currentThread().getName());
//獲取中斷標誌並重直
System.out.println("isInterrupted6: " + Thread.interrupted() + "查詢的線程"+Thread.currentThread().getName());
threadOne.join();
System.out.println("Main thread is over.");
}
}
查看了很多文章,對interrupt()、isInterrupted()和interrupted()區別都說的讓人不太清晰,寫下對這個三個的理解,多多指教!
運行結果是:
isInterrupted1: true查詢的線程Thread-0
isInterrupted2: false查詢的線程main
isInterrupted3: false查詢的線程main
isInterrupted4: true查詢的線程Thread-0
isInterrupted5: true查詢的線程main
isInterrupted6: false查詢的線程main
從結果可以看出 threadOne.interrupt()實際上是給Thread-0增加了中斷標記,所以isInterrupted1是true,
threadOne.interrupted()實際上是查詢主線程有沒有設置中斷標記,
Thread.interrupted()查詢當前線程也就是主線程的中斷狀態,主線程沒有中斷過所以isInterrupted3和isInterrupted2都是false
Thread.currentThread().interrupt();是給主線程main設置中斷標記
threadOne.interrupted()會查詢主線程狀態好把狀態清除掉所以isInterrupted5: true,isInterrupted6: false