概念
volatile是java中的关键字,是一个变量修饰符,被用来修饰会被不同线程访问和修改的变量
作用
1) 可见性
可见性是多个线程访问同一个变量时,其中一个线程修改了该变量的值,其他线程能够立即看到修改的值例子:
class VolatileTestObj {
private static volatile boolean flag = true;
public static void main(String[] args) throws InterruptedException {
new Thread(() -> {
System.out.println("当前线程: "+Thread.currentThread().getName());
while (flag) {
}
System.out.println("server end");
}, "server").start();
Thread.sleep(1000);
new Thread(() -> {
System.out.println("当前线程: "+Thread.currentThread().getName());
while (!flag) {
System.out.println("server2 改为true");
flag = true;
}
}, "server2").start();
System.out.println("主线程改为false");
flag = false;
}
}
2) 原子性
volatile是无法保证原子性的
3) 有序性(防止jvm虚拟机的指令重排)
有序性: 即程序执行的顺序按照代码的先后顺序来执行