volatile:易变、可变。说的是变量、数据在主内存跟工作内存经常出现不一致的情况。 加了volatile后就能保证数据永远都是最新的。
“工作内存”存在的意义是从主内存中拷贝副本,提高效率,假设没有工作内存直接操作主内存,那么主内存的并发量将会很高影响性能。这个和指令重排这个概念一样,用好了提高效率,用不好就出错了。
有些地方把volatile叫做轻量级的synchronized,synchronized是保证并发保证同步,这个volatile只保证了同步的数据可见,所以它实现了synchronized的一部分功能。volatile现在并不多见,因为现在机器的性能都很高,能够将工作内存中的数据及时读回主内存。
package com.sxt.others;
/**
* volatile用于保证数据的同步,也就是可见性
*
* @author
*
*/
public class VolatileTest {
private volatile static int num = 0;
public static void main(String[] args) throws InterruptedException {
new Thread(()->{
while(num==0) { //此处不要编写代码
}
}) .start();
Thread.sleep(1000);
num = 1;
}
}