这是我的简单程序:
public class Test {
public static Object obj = null;
public static void main(String[] args) {
obj = null;
System.out.println("Start");
MyThread myThread = new MyThread();
myThread.start();
while(obj == null) {
//System.out.println("");
}
System.out.println("Stop");
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread 1");
try {
sleep(1);
} catch (InterruptedException ex) {
}
System.out.println("Thread 2");
Test.obj = new Object();
System.out.println("Thread 3");
}
}
如您所见,我运行 MyThread 线程和 Test 类的 while 循环。循环检查 obj 是否为空,如果不是,我停止它并打印“2”。MyThread 为 obj 赋值。现在的问题是:
在 Java 7 64 位下,如果 while 循环为空,它永远不会停止。但是,如果我取消注释 System.out.print(""),则会打印循环下的“Stop”。但是对于循环内的其他语句(例如 int i = 1;),我的程序会冻结。在 Java 32 位下,所有情况下一切正常。
有人可以向我解释这种奇怪的行为吗?
谢谢!