java – 线程无法停止

前端之家收集整理的这篇文章主要介绍了java – 线程无法停止前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

为什么我的线程无法停止???

 class Threadz {

    class runP implements Runnable {
        int num;
        private volatile boolean exit = false;
        Thread t;
        public runP() {
            t = new Thread(this,"T1");
            t.start();
        }

        @Override
        public void run() {
            while(!exit) {
                System.out.println(t.currentThread().getName()+": "+num);
                num++;  
                try {
                    t.sleep(200);   
                } catch(InterruptedException e) {}
            }
        }
        public void stop() {
            exit = true;
        }
    }

    public static void main(String[] a) {
        runP rp = new Threadz().new runP();
        if(rp.num == 1) {rp.stop();}
    }

}

如果我使用rp.num == 0,则可以立即停止线程.但是,为什么当我更改rp.num == x(x是大于0的任何数字)时,线程无法停止?请帮我解决这个问题…感谢任何帮助.

最佳答案
因为此代码不在线程的run()方法中执行:

    runP rp = new Threadz().new runP();
    if (rp.num == 1) {
        rp.stop();
    }

它的工作原理为0,因为int的默认值为0.
但是在应用程序的所有执行中并不一定如此,因为runP的线程可以在检查之前运行并且增量为:if(rp.num == 0)

在runP线程的run方法中移动停止条件:

@Override
public void run() {
    while(!exit) {
        System.out.println(t.currentThread().getName()+": "+num);
        num++;  
        try {
            t.sleep(200);   
        } catch(InterruptedException e) {}

        if (rp.num == 1) {
          exit = true;
        }
    }
}
原文链接:https://www.f2er.com/java/437375.html

猜你在找的Java相关文章