加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 线程无法停止

发布时间:2020-05-24 07:48:43 所属栏目:Java 来源:互联网
导读:为什么我的线程无法停止??? class Threadz { class runP implements Runnable { int num; private volatile boolean exit = false; Thread t; public runP() {

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

 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;
        }
    }
}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读