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