JMM内存模型

209 阅读1分钟

jmm是针对多线程工作的一个抽象规范

java内存类型

共享变量那个区域叫做主内存

java 每个线程都有自己的工作内存

 工作内存里装的是我的线程需要依赖的变量副本

数据同步八大原子操作执行过程

并发编程的可见性,原子性与有序性问题

volatile

 1.保证及时可见性
 
 2.不保证原子性
 
 3.保证有序性(指令不重排)
 

1.从现象上面

A线程读取了成员变量boolean initFlag =false,B线程改了成员变量boolean initFlag =false, 如果不加initFlag不加volatile修饰,A线程再次读取到的值的依旧是boolean initFlag =false,反之加了volatile读取到的就是boolean initFlag =false

2.从字节码层面

如果加了initFlag加了volatile修饰字节码会多出一个ACC_VOLATILE,反正字节码里面则不会有这个修饰符