作者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
1F:→ ogamenewbie:google volatile jls 04/14 05:41
2F:→ pzyc79:多谢 其实第一个范例就是JLS的 但是我不懂他拿volatile取 04/14 11:06
3F:→ pzyc79:代synchronized的意思 我试过做不出同样效果 04/14 11:09
4F:推 chchwy:你有念过OS的平行计算那章吗? 04/14 12:35
5F:→ pzyc79:没有耶... 我去念看看 多谢指引 (真希望有中文版的 04/14 18:14
6F:→ pzyc79:我明白了 volatile是关闭变数使用cpu寄存器的存取优化 04/15 01:37