[問題] volatile這個該死的修飾詞到底是幹嘛用的

看板java作者 (English Idiot 簡稱EI)時間13年前 (2011/04/14 04:25), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/2 (看更多)
如題 我已經找過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

04/14 05:41, , 1F
google volatile jls
04/14 05:41, 1F

04/14 11:06, , 2F
多謝 其實第一個範例就是JLS的 但是我不懂他拿volatile取
04/14 11:06, 2F

04/14 11:09, , 3F
代synchronized的意思 我試過做不出同樣效果
04/14 11:09, 3F

04/14 12:35, , 4F
你有念過OS的平行計算那章嗎?
04/14 12:35, 4F

04/14 18:14, , 5F
沒有耶... 我去念看看 多謝指引 (真希望有中文版的
04/14 18:14, 5F

04/15 01:37, , 6F
我明白了 volatile是關閉變數使用cpu寄存器的存取優化
04/15 01:37, 6F
文章代碼(AID): #1DfWRFk- (java)
文章代碼(AID): #1DfWRFk- (java)