簡體   English   中英

32 位 JVM 和 64 位 JVM 中的示例 javase 程序,結果不一樣

[英]example javase pragram in 32bit JVM and 64bit JVM ,result NOT same

有兩個java主要方法:

首先 :

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;
    }
}

第二:

import java.util.concurrent.TimeUnit;

public class StopThread {
    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)
                    i++;
            }
        });
        backgroundThread.start();

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

在我的 mac pro 中,結果是:第一個程序將在大約一秒鍾后停止,第二個程序將仍在運行

我的 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和64位jvm上測試,結果不一樣,為什么?

在這兩種情況下, stopRequested必須是volatile 否則,您啟動的線程可能看stopRequested主線程所做的stopRequested更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM