一、概念
volatile 是 Java 中的关键字,是一个变量修饰符,被用来修饰会被不同线程访问和修改的变量。
二、volatile 作用
1. 可见性
可见性是指多个线程访问同一个变量时,其中一个线程修改了该变量的值,其它线程能够立即看到修改的值。
在 Java 内存模型中,所有的变量都存储在主存中,同时每个线程都拥有自己的工作线程,用于提高访问速度。线程会从主存中拷贝变量值到自己的工作内存中,然后在自己的工作线程中操作变量,而不是直接操作主存中的变量,由于每个线程在自己的内存中都有一个变量的拷贝,就会造成变量值不一致的问题。
如下面的代码所示:
测试类:
class VolatileTestObj { private String value = null; private boolean hasNewValue = false; public void put(String value) { while (hasNewValue) { // 等待,防止重复赋值 } this.value = value; hasNewValue = true; } public String get() { while (!hasNewValue) { // 等待,防止获取到旧值 } String value = this.value; hasNewValue = false; return value; } }
测试代码:
public class VolatileTest { public static void main(String... args) { VolatileTestObj obj = new VolatileTestObj(); ne