[英]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.