1. 程式人生 > >如何優雅的結束執行緒(一)

如何優雅的結束執行緒(一)

第一種方式是通過一個開關控制

public class ThreadCloseGraceful {

    private static class Worker extends Thread {
        private volatile boolean start = true;

        @Override
        public void run() {
            while (start) {
                //
            }
        }

        public void shutdown() {
            this.start = false;
        }
    }

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.start();

        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        worker.shutdown();
    }
}

 

第二種方式是通過打斷interrupt打斷執行緒

public class ThreadCloseGraceful2 {
    private static class Worker extends Thread {

        @Override
        public void run() {
            while (true) {
                if (Thread.interrupted())
                    break;
            }
            //-------------
            //-------------
            //-------------
        }
    }

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        worker.interrupt();
    }
}

汪文君老師的多執行緒,這邊是比較完美的狀態,但是常常我們在專案中可能不會有這樣一個flag或者也不會丟擲這個異常

那麼我們可以使用一種類似stop的方式(自己寫一個stop)來結束它