美文网首页
安全的终止线程

安全的终止线程

作者: tingshuo123 | 来源:发表于2020-09-23 16:51 被阅读0次

    安全的终止线程

    如果想终止线程最好不要使用 stop 方法,因为 stop 方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下。

    终止线程最好使用线程中断标识 isInterrupt 或者自定义一个 boolean 变量来控制是否需要停止任务并终止该线程。

    Shutdown.java

    import java.util.concurrent.TimeUnit;
    
    /**
     * 使用标识安全的终止线程
     */
    public class Shutdown {
        public static void main(String[] args) throws InterruptedException {
            Runner one = new Runner();
            Thread countThread = new Thread(one, "CountThread");
            countThread.start();
            TimeUnit.SECONDS.sleep(1);
            countThread.interrupt();
            Runner two = new Runner();
            countThread = new Thread(two, "CountThread");
            countThread.start();
            TimeUnit.SECONDS.sleep(1);
            two.cancel();
        }
    
        private static class Runner implements Runnable {
            private long i;
            private volatile boolean on = true;
    
            /**
             * 通过线程中断标志位或则一个 boolean 变量来取消或者停止任务
             */
            @Override
            public void run() {
                while (on && !Thread.currentThread().isInterrupted()) {
                    i++;
                }
                // 清理资源
                System.out.println("Count = " + i);
            }
    
            public void cancel() {
                on = false;
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:安全的终止线程

          本文链接:https://www.haomeiwen.com/subject/fkyoyktx.html