示例javase pragram在32位JVM和64位JVM中,结果不一样

时间:2015-12-24 02:29:12

标签: java concurrency jvm

有两种java主要方法:

第一个:

RDD[Array[Set]]

第二个:

import java.util.concurrent.TimeUnit;

public class StopThread2 {
    private static boolean stopRequested;

    public static void main(String[] args)
        throws InterruptedException {
        Thread backgroundThread = new Thread(new Runnable() {
            public void run() {
                int i = 0;
                while (!stopRequested)
                System.out.println(i++);
            }
        });
        backgroundThread.start();

        TimeUnit.SECONDS.sleep(1);
        stopRequested = true;
    }
}

在我的Mac专业版中,结果是 :第一个pragram将在一秒钟之后停止,第二个将继续运行

我的java env是:

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468-11M4833)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)

对于相同的代码,我在32位jvm和64bit jvm中测试,结果不一样,为什么?

1 个答案:

答案 0 :(得分:0)

在这两种情况下,

stopRequested必须为volatile。否则,您启动的线程可能看不到主线程所做的stopRequested更新。