一.内存模型:
- 每一个线程有一个工作内存,和主存是独立的。
- 工作内存存放主存重变量的值得拷贝。
- 线程独享的工作内存和主存的关系,如下图:
1.当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(read)操作;第二,由工作内存执行的相应的load操作;
2.当数据从工作内存拷贝到主内存时,也出现两个操作:第一个,由工作内存执行的存储(store)操作;第二,由主内存执行的相应的写(write)操作。
3.每一个操作都是原子的,即执行期间不会被中断,即read不会中断,但是read和load直接会有中断。
4.对于普通变量,一个线程中更新的值,不能马上反应在其他变量中。如果需要在其他线程中立即可见,需要使用 volatile 关键字。
jmm控制共享变量和共享变量副本直接的拷贝,基于cpu优化的原因,会有一定程度的延迟。