Java Thread interrupt()方法

2019-10-16 22:24:37

Thread類的interrupt()方法用於中斷執行緒。如果任何執行緒處於休眠或等待狀態(即呼叫sleep()wait()),那麼使用interrupt()方法,可以通過丟擲InterruptedException來中斷執行緒執行。

如果執行緒未處於休眠或等待狀態,則呼叫interrupt()方法將執行正常行為,並且不會中斷執行緒,但會將中斷標誌設定為true

語法

public void interrupt()

異常

  • SecurityException:如果當前執行緒無法修改執行緒,則丟擲此異常。

範例一 :中斷停止工作的執行緒
在這個程式中,在中斷執行緒之後,丟擲一個新的異常,因此它將停止工作。

public class JavaInterruptExp1 extends Thread  
{    
    public void run()  
    {    
        try  
        {    
            Thread.sleep(1000);    
            System.out.println("yiibai");    
        }catch(InterruptedException e){    
            throw new RuntimeException("Thread interrupted..."+e);  

        }    
    }    
    public static void main(String args[])  
    {    
        JavaInterruptExp1 t1=new JavaInterruptExp1();    
        t1.start();    
        try  
        {    
            t1.interrupt();    
        }catch(Exception e){System.out.println("Exception handled "+e);}    
    }    
}

執行上面範例程式碼,得到以下結果:

Exception in thread "Thread-0" java.lang.RuntimeException: Thread interrupted...java.lang.InterruptedException: sleep interrupted
    at JavaInterruptExp1.run(JavaInterruptExp1.java:10)

範例二 :中斷不停止工作的執行緒
在這個例子中,在中斷執行緒之後,處理異常,因此它將從休眠狀態中突破但不會停止工作。

public class JavaInterruptExp2 extends Thread  
{    
    public void run()  
    {    
        try  
        {    
            //Here current threads goes to sleeping state  
            // Another thread gets the chance to execute  
            Thread.sleep(500);    
            System.out.println("yiibai");    
        }catch(InterruptedException e){    
            System.out.println("Exception handled "+e);    
        }    
        System.out.println("thread is running...");    
    }    
    public static void main(String args[])  
    {    
        JavaInterruptExp2 t1=new JavaInterruptExp2();    
         JavaInterruptExp2 t2=new JavaInterruptExp2();  
        // call run() method   
        t1.start();   
        // interrupt the thread   
        t1.interrupt();    
    }    
}

執行上面範例程式碼,得到以下結果:

Exception handled java.lang.InterruptedException: sleep interrupted
thread is running...

範例三 :中斷行為正常的執行緒
在此程式中,執行緒執行期間沒有發生異常。 這裡,interrupt()方法僅將中斷標誌設定為true,以便稍後由Java程式員用於停止執行緒。

public class JavaInterruptExp3 extends Thread  
{    
    public void run()  
    {    
        for(int i=1; i<=5; i++)    
            System.out.println(i);    
    }    
    public static void main(String args[])  
    {    
        JavaInterruptExp3 t1=new JavaInterruptExp3();    
        // call run() method  
        t1.start();    
        t1.interrupt();    
    }    
}

執行上面範例程式碼,得到以下結果:

1
2
3
4
5