如何优雅的结束线程(一)

版权声明:一起学习一起进步。如果正好对你有帮助的话,很开心 https://blog.csdn.net/wang0112233/article/details/83340411

第一种方式是通过一个开关控制

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)来结束它

猜你喜欢

转载自blog.csdn.net/wang0112233/article/details/83340411
今日推荐