1. 程式人生 > >java使用interrupt()終止執行緒

java使用interrupt()終止執行緒

java使用interrupt終止執行緒

呼叫一個執行緒的interrupt() 方法中斷一個執行緒,並不是強行關閉這個執行緒,只是將執行緒的中斷狀態置為true,執行緒是否中斷,由執行緒本身決定。
isInterrupted() 判定當前執行緒是否處於中斷狀態。

使用interrupt()方法來中斷執行緒的場景:
一般run()方法執行完,執行緒就會正常結束,有些執行緒它們需要長時間的執行,只有在外部某些條件滿足的情況下,才能關閉這些執行緒。

public class InterrputTest {
	

	private static class InterrputThread extends Thread{
		


		@Override
		public void run() {
			while(!isInterrupted()){
				try {
					System.out.println("do bussiness");//執行緒非阻塞時,main呼叫執行緒的interrupt()方法,呼叫完之後中斷狀態為true,下次進入迴圈跳出,結束執行緒
					Thread.sleep(1000);//執行緒阻塞時,main呼叫執行緒的interrupt()方法,丟擲InterruptedException異常,呼叫完之後會復位中斷狀態為false,catch中重新呼叫interrupt()才能跳出迴圈
				} catch (InterruptedException e) {
					e.printStackTrace();
					interrupt();//也可以使用break跳出迴圈;
				}
			}
		}
	}

	public static void main(String[] args) throws InterruptedException {
		Thread endThread = new InterrputThread();
		endThread.start();
		Thread.sleep(500);//主執行緒休眠500毫秒
		endThread.interrupt();
	}

}