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

java – 线程无法停止

发布时间:2020-12-15 01:07:09 所属栏目: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) { Syste

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读