【发布时间】:2017-09-17 07:50:08
【问题描述】:
我有这个代码 sn-p。当我尝试匹配if 语句中的条件时,如果满足,则应将running 布尔值设置为false。但它(Thread)仍在工作。谁能告诉我我正在做的错误?
public void timer() {
new Thread() {
@Override
public void run() {
int min = 1;
int sec = 10;
System.out.println("--- " + min + " Minutes and " + sec + " Seconds ---");
boolean running = true;
while (running) {
System.gc();
try {
for (int i = sec; i <= 60; i--) {
if (i >= 0) {
System.out.println(min + " Minutes and " + i + " Seconds");
Thread.sleep(1000);
} else {
i = 60;
min--;
if (min < 0) { //condition I'm checking
System.out.println("OOOOOOOOOOOOOKKKKKKKKKKKKKKKKKKKKKKKKK");
running=false; //while loop should be false and thread should not run anymore
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
一切正常。 (甚至“OKKKKKKKKK...”也在打印),但running 没有设置为false。
【问题讨论】:
-
running 肯定被设置为 false,你永远无法再次测试
while条件。使用标记为break甚至return退出会更容易。你的 for 循环永远不会终止。 -
问题在于您将
i设置为60。这意味着您将再重复for循环60 次......再一次......一次又一次。你永远不会回到while(running)测试。 -
非常感谢@StephenC 先生的帮助
-
谢谢@pvg 先生
标签: java multithreading