为什么我的线程无法停止???
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()方法中执行:
原文链接:https://www.f2er.com/java/437375.html 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;
}
}
}