gpt4 book ai didi

java - 线程无法停止

转载 作者:搜寻专家 更新时间:2023-10-31 20:09:11 26 4
gpt4 key购买 nike

为什么我的帖子停不下来???

 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 的线程可以运行并在检查之前递增 num :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;
}
}
}

关于java - 线程无法停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com