作者pzyc79 (English Idiot 簡稱EI)
看板java
標題[問題] volatile這個該死的修飾詞到底是幹嘛用的
時間Thu Apr 14 04:25:49 2011
如題
我已經找過google、javaworld都找不到滿意的答案
要嘛就是說他是什麼強制Thread不能用內存要去讀記憶體 沒範例
要嘛就是有簡單的程式範例 但是我實作結果又跟說的不一樣
1.class Test {
2. static volatile int i = 0, j = 0;
3. static void one() { i++; j++; }
4. static void two() {
5. System.out.println("i=" + i + " j=" + j);
6. }
7.}
這個
他說i和j會同時更新 但是印出來i和j還是會不一樣啊
public class StoppableTask extends Thread {
private volatile boolean pleaseStop;
public void run() {
while (!pleaseStop) {
// do some stuff...
}
}
public void tellMeToStop() {
pleaseStop = true;
}
}
這個
他說如果不用volatile會導致無限循環 可是明明不寫volatile呼叫tellMeStop
他還是會停下來阿
到底是怎樣我快瘋了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.98.62
→ ogamenewbie:google volatile jls 04/14 05:41
→ pzyc79:多謝 其實第一個範例就是JLS的 但是我不懂他拿volatile取 04/14 11:06
→ pzyc79:代synchronized的意思 我試過做不出同樣效果 04/14 11:09
推 chchwy:你有念過OS的平行計算那章嗎? 04/14 12:35
→ pzyc79:沒有耶... 我去念看看 多謝指引 (真希望有中文版的 04/14 18:14
→ pzyc79:我明白了 volatile是關閉變數使用cpu寄存器的存取優化 04/15 01:37