volatile不是线性安全的 对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入 通常用于在多线程环境下只有一个线程更改值,其他线程读取值的情况
非线性安全测试代码
public class VolatileTest {
public static volatile int num =
0;
public static void main(String[] args)
throws Exception {
for (
int i =
0; i <
100; i++) {
new Thread(
new Runnable() {
public void run() {
for (
int j =
0; j <
100; j++) {
num++;
}
}
}).start();
}
Thread.sleep(
2000);
System.out.println(num);
}
}
输出的不是10000
volatile变量的一种典型用法,就是用于那些状态的标记,例如:
volatile boolean flag=
false;
while(!flag){
doSomething();
}