而没有身体的循环正陷入无限循环

时间:2015-04-23 23:14:19

标签: java while-loop runnable

我搜索了很多,但没有找到解决这个问题的方法,所以我在这里问了这个问题。

我制作了一小段代码来复制问题。 以下是那些Java类。

具有主要功能的类:

package test;

public class Main {
    public static void main(String[] args) {
        Background ob = new Background();

        while(ob.val > 0);

        System.out.println("Program Completed");
    }
}

可运行的类:

package test;

public class Background implements Runnable {
    int val;
    Thread t;

    public Background() {
        val = 500;
        t=new Thread(this); 
        t.start();
    }

    @Override
    public void run() {
        while(val > -1000) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            val--;
        }
    }

}

现在这段代码没有打印“Program Completed”,所以我认为while循环是无限循环的。 但是,如果我用

替换while(ob.val > 0);
while(ob.val > 0){
    System.out.println("val: "+ob.val);
};

或任何System.out.println()语句然后我可以看到“程序已完成”。 但是只有任何System.out.println()声明。 如果我用

替换while(ob.val > 0);
int g;
while(ob.val > 0){
    g = 0;
};

以上代码也未显示“已完成程序”。

主代码太大,无法在此发布,所以我已经复制了问题。 在ubuntu 14.04中测试了复制的代码, JDK - > JDK-8u31-Linux的64

我没有在Windows中测试过这个复制的代码。但是我在windows&中测试了主要代码。工作正常。

我真的很担心这种行为。有人帮我吗? 提前谢谢。

0 个答案:

没有答案