java中volatile修饰的变量,是不是每一次访问都要访问主存,而普通变量不一定会

 public class Test {
    volatile boolean shutdownRequested;
    public void shutdown() {
        shutdownRequested=true;
    }

    public void doWork() {
        //比如这里,每一次访问shutdownRequested都需要从主存中获取;而普通变量就有可能只在工作内存中获取
        while(!shutdownRequested) {
            //do stuff
        }
    }
}

访问不访问主存,取决于缓存里的数据是不是脏数据。加上volatile,可以避免脏读cache里的数据。