java使用interrupt()終止執行緒
阿新 • • 發佈:2018-12-12
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(); } }