java的内存模型
0 内存模型主要处理了原子性、可见性、有序性问题
1 java内存分为main memory和working memory
2 非局部变量的使用全是从mian memory加载到working memory中
3 java中存在指令重排序现象典型的可能重排序的现象代码如下:
线程A
config = new HashMap();
file = loadConfigFile(file,config);
isInit = true;
这段代码中的 isInit可能被重排序在loadConfig前执行,这样假如有如下代码:
线程B
while(!isInit)
{
sleep(10);
}
config.get(xx);这个get可能会报错,因为指令重排序之后,A线程里对isInit的assign
先于设置map执行,这样对map取值就会报错,解决方案是吧isInit改为volatile类型
4 java的volatile类型的变量每次use或assign都必须从main memory read-load 每次store后
会立即write到main memory中
5 java 1.5之后的volatile能屏蔽指令重排
6