interrupt的實際用法

       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

  過程當中受阻,則其中斷狀態將被清除,它還將收到一個 InterruptedExceptionget

    進行提早進行結束此狀態,並進行拋出InterruptedException異常。 it

相關文章
相關標籤/搜索