interrupt()方法是在運行的線程中進行對該線程打上中斷標記,只是告訴線程是,這個線程能夠被中斷,可是不會去進行中斷操做,線程會保持執行,直到線程的代碼執行完畢爲止。html
這個是線程方法:java
public class MyService extends Thread{ public void run() { super.run(); for(int i=0;i < 50000;i++) { System.out.println("是否被中斷:"+this.isInterrupted()); if(this.isInterrupted()) { System.out.println("已是中止狀態了"); break; } System.out.println("i="+ (i+1)); } System.out.println("我被輸出"); } }
這個是主線程main方法:this
public class Run { public static void main(String[] args) { try { MyService thread =new MyService(); thread.start(); Thread.sleep(10); thread.interrupt(); System.out.println("是否中止1:"+ thread.interrupted()); System.out.println("是否中止2:"+ thread.interrupted()); System.out.println("end!"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
下面是運行結果:線程
是否被中斷:false i=253 是否被中斷:true 是否中止1:false 是否中止2:false end! 已是中止狀態了
因此要想真正的中斷一個線程,須要進行判斷方法boolean interrupted()進行判斷。code
最後講一下:htm
中斷線程。若是線程在調用 Object
類的 wait()
、wait(long)
或 wait(long, int)
方法,或者該類的 join()
、join(long)
、join(long, int)
、sleep(long)
或 sleep(long, int)
方法blog
過程當中受阻,則其中斷狀態將被清除,它還將收到一個 InterruptedException
get
進行提早進行結束此狀態,並進行拋出InterruptedException異常。 it