これは私の簡単なプログラムです:
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 が null かどうかをチェックし、そうでない場合は停止して "2" を出力します。MyThread は obj に値を割り当てます。そして今問題:
Java 7 64 ビットでは、空の while ループの場合、ループは停止しません。ただし、System.out.print("") のコメントを外すと、ループの下の "Stop" が出力されます。しかし、ループ内の他のステートメント (int i = 1; など) では、プログラムがフリーズします。Java 32 ビットでは、すべてのケースで問題なく動作します。
誰かが私にこの奇妙な行動を説明してもらえますか?
ありがとう!