线程-volatile

volatile:两个作用

1:保证线程可见性

2:禁止指令重排序

1,2线程同时复制主内存的的flag,然后修改成false, 当从主内存读取,以及修改后再赋值给主内存是不可控制的,所以,当1线程修改后但没有赋值给主内存的时候,2线程也拿到主内存的数据,就出现线程不可见的问题

 

线程-volatile

指令重排:

int a=3,首先是分配内存,初始化,2是赋值,3是对象指向,当创建对象的时候, 可能 先1初始化,直接进入3对象指向,这时候值还是0,但是第二个线程直接访问这个对象就得到0值不是3,加入vlolatile就是1执行完执行2,再执行三

线程-volatile