我搜索了很多,但没有找到解决这个问题的方法,所以我在这里问了这个问题。
我制作了一小段代码来复制问题。 以下是那些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&中测试了主要代码。工作正常。
我真的很担心这种行为。有人帮我吗? 提前谢谢。