主物理内存;线程工作内存;某个线程工作内存修改之后更新主物理内存的数据,别的线程的工作内存立马更根据著物理内存的更新而更新,为volatile可见性
代码:
import java.util.concurrent.TimeUnit;
class MyData{
//int number = 0 ;
volatile int number = 0 ;
public void setTo60(){
this.number = 60;
}
}
/**
* 1 验证wolatile可见性
* 2 验证wolatile不保证原子性
* 3 验证wolatile禁止重排
*/
public class VolatileDemo {
public static void main(String[] args){
final MyData myData = new MyData(); //资源类
final Thread aa = new Thread() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " comes in");
//暂停一会线程;
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
myData.setTo60();
};
};
aa.setName("AAA");
aa.start();
//第二个线程是我们的main线程
while(myData.number == 0){
//main线程一直在这里等待我们的循环直到numbet值不再为0;
}
System.out.println(Thread.currentThread().getName()+" mission is over, main get number value :" + myData.number);
}
}