JMM
- lock
- unlock
- read
- load
- use
- assign
- store
- write
Volatile
1、保证可见性,写操作后插入一个写屏障指令,在读操作前插入一个读屏障指令
2、不保证原子性(可以加锁或者使用原子类)
public class VolatileTest {
// volatile static int num = 0;
static AtomicInteger num = new AtomicInteger();
public static void add(){
num.getAndIncrement();
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
new Thread(()->{
for (int j = 0; j < 1000; j++) {
add();
}
}).start();
}
while