繁体   English   中英

For和While Loop

[英]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循环导致程序关闭?

我不清楚你在问什么。 但是,如果您希望whilefor循环在processing设置为true立即终止,那就不会发生这种情况。 while将执行正文中的语句(即for循环), 然后它将测试条件( processing == true ),如果它是真的,它再次执行语句, 然后再次测试条件。 它在for循环执行时不会测试它。 设置processing变量时,它不会“注意到”。 因此,当processing设置为truefor循环将继续运行直到完成,这可能是另外26秒。

要解决这个问题,请添加

if (!processing)
    break;

for循环中。 现在,每次通过for循环都会测试processing标志。 (如果是我,我会在while循环中放置一个“标签”并使用它来break两个循环。)另一种解决方法:

for(int i = 1; i<27 && processing; i++){

这意味着只要processingtruefor循环就会继续。

注意:sleep(1000)正在进行时,这些解决方案仍然不会测试processing 因此程序在终止之前仍然可以暂停1秒钟。 如果你真的想要一个终止sleep的解决方案,你将使用interrupt或其他一些并发功能。

它应该工作。 你的for循环大约需要27秒才能完成。 for循环结束后,它应该出来了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM