[英]For and While Loop
我有一个同时运行的程序,我有这个问题,我想停止线程,但一旦我点击输入,for循环/ while循环不会被取消
如果我参加了for
循环出的while
循环,程序实际响应输入并关闭。
class MyNumber extends Thread {
private volatile boolean processing = true;
public void run() {
while (processing) {
// Once I take this for loop out(put // beside it like right now), the enter key to stop the program then does work.
//for(int i = 1; i<27; i++){
System.out.println("Letter " + "i");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// }
}
}
public void permSleep() {
processing = false;
}
}
public class LetterNumber {
public static void main(String[] args) {
MyNumber num1 = new MyNumber();
num1.start();
System.out.println("Hit enter to stop the Numbers!");
Scanner shutter1 = new Scanner(System.in);
shutter1.nextLine();
num1.permSleep();
}
}
为什么for
循环导致程序不关闭?
我不清楚你在问什么。 但是,如果您希望while
和for
循环在processing
设置为true
立即终止,那就不会发生这种情况。 while
将执行正文中的语句(即for
循环), 然后它将测试条件( processing == true
),如果它是真的,它再次执行语句, 然后再次测试条件。 它在for
循环执行时不会测试它。 设置processing
变量时,它不会“注意到”。 因此,当processing
设置为true
, for
循环将继续运行直到完成,这可能是另外26秒。
要解决这个问题,请添加
if (!processing)
break;
在for
循环中。 现在,每次通过for
循环都会测试processing
标志。 (如果是我,我会在while
循环中放置一个“标签”并使用它来break
两个循环。)另一种解决方法:
for(int i = 1; i<27 && processing; i++){
这意味着只要processing
为true
, for
循环就会继续。
注意:当sleep(1000)
正在进行时,这些解决方案仍然不会测试processing
。 因此程序在终止之前仍然可以暂停1秒钟。 如果你真的想要一个终止sleep
的解决方案,你将使用interrupt
或其他一些并发功能。
它应该工作。 你的for
循环大约需要27
秒才能完成。 在for
循环结束后,它应该出来了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.