java 停止執行緒

soug發表於2020-04-01

stop()已經過時.

停止執行緒:run()方法結束。

開啟多執行緒執行,通常程式碼都是迴圈結構。

只要控制住迴圈,就可以讓run()結束,也就結束了執行緒。

class StopThread implements Runnable {    private boolean flag = true;
    @Override    public void run() {        while (flag) {
            System.out.println(Thread.currentThread().getName() + "...run");
        }
    }    public void changeFlag() {
        flag = false;
    }
}public class StopThreadDemo {    public static void main(String[] args) {
        StopThread st = new StopThread();
        Thread t1 = new Thread(st);
        Thread t2 = new Thread(st);
        t1.start();
        t2.start();        int num = 0;        while (true) {            if (num++ == 60) {
                st.changeFlag();                break;
            }
            System.out.println(Thread.currentThread().getName() + "......" + num);
        }
    }
}

 

特殊情況:當執行緒處於凍結狀態就不會讀取到標記,那麼執行緒也就不會結束。

當沒有指定的方式讓凍結的執行緒恢復到執行狀態時,這時需要對凍結進行清除,強制讓執行緒恢復到執行狀態中來,這樣就可以操作標記讓執行緒結束。

Thread類中提供了該方法:interrupt();

class StopThread implements Runnable {    private boolean flag = true;
    @Override    public synchronized void run() {        while (flag) {            try {
                wait();
            } catch (InterruptedException e) {
                System.out.println(Thread.currentThread().getName() + "...Exception");
                flag = false;
            }
            System.out.println(Thread.currentThread().getName() + "...run");
        }
    }    public void changeFlag() {
        flag = false;
    }
}public class StopThreadDemo {    public static void main(String[] args) {
        StopThread st = new StopThread();
        Thread t1 = new Thread(st);
        Thread t2 = new Thread(st);
        t1.start();
        t2.start();        int num = 0;        while (true) {            if (num++ == 60) {//                st.changeFlag();                t1.interrupt();
                t2.interrupt();                break;
            }
            System.out.println(Thread.currentThread().getName() + "......" + num);
        }
        System.out.println("over");
    }
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69966782/viewspace-2683888/,如需轉載,請註明出處,否則將追究法律責任。

相關文章