1. 程式人生 > >關於java中怎麼終止一個執行緒的執行

關於java中怎麼終止一個執行緒的執行

其實現在要對一個迴圈執行的執行緒關閉,對迴圈執行體設定執行標誌是常見的方法。另外一種方法是使用interrupt方法中斷執行緒方式關閉執行緒。

使用interrupt方法中斷執行緒來退出執行緒

sleep wait io阻塞的情況下,對於這種執行緒退出的可以採用這種方法。主要方法原理就是使用interrupt方法設定中斷狀態,然後在catch程式碼塊中執行如下邏輯。

catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.e(LOG_TAG, "I'M exit exit ....");
e.printStackTrace();
break
; }

來退出執行緒。

給子執行緒設定標誌位關閉子執行緒


package chapter2;

public class ThreadFlag extends Thread
{
    public volatile boolean exit = false;//設定停止標誌位

    public void run()
    {
        while (!exit);
    }
    public static void main(String[] args) throws Exception
    {
        ThreadFlag thread = new
ThreadFlag(); thread.start(); sleep(5000); // 主執行緒延遲5秒 thread.exit = true; // 設定終止子執行緒thread thread.join(); System.out.println("執行緒退出!"); } }

第二個例子

public class AlternateStop extends Object implements Runnable {
    private volatile boolean stopRequested;//停止執行緒標誌位
private Thread runThread;//指向當前執行的執行緒 public void run() { runThread = Thread.currentThread(); stopRequested = false; int count = 0; while ( !stopRequested ) { System.out.println("Running ... count=" + count); count++; try { Thread.sleep(300); } catch ( InterruptedException x ) { Thread.currentThread().interrupt(); //當設定執行緒中斷時,sleep方法會拋InterruptedException 異常,也可以在這裡退出執行。 } } System.out.println("stoped"); } public void stopRequest() {//設定執行緒停止請求。 //同時設定標誌位和設定執行緒中斷標誌 stopRequested = true; if ( runThread != null ) { runThread.interrupt(); } } public static void main(String[] args) { AlternateStop as = new AlternateStop(); Thread t = new Thread(as); t.start(); try { Thread.sleep(2000); } catch ( InterruptedException x ) { // ignore } as.stopRequest(); } }

可能的執行結果如下:

Running ... count=0
Running ... count=1
Running ... count=2
Running ... count=3
Running ... count=4
Running ... count=5
Running ... count=6
stoped

參考文獻