JUC-volatile详解

标签:目的   共享   访问   false   可见   rgb   静态   rpc   except   

     public class VolatileExample extends Thread{
         //设置类静态变量,各线程访问这同一共享变量
        private static boolean flag = false;      
        //无限循环,等待flag变为true时才跳出循环
         public void run() {while (!flag){};}
         public static void main(String[] args) throws Exception {
            new VolatileExample().start();
            //sleep的目的是等待线程启动完毕,也就是说进入run的无限循环体了
            Thread.sleep(100);
            flag = true;
        }
    }

预计效果->程序正常结束
实际效果->程序死循环
解决方案->volatile 修饰变量
作用:
  • 线程对变量进行修改之后,要立刻回写到主内存。
  • 线程对变量读取的时候,要从主内存中读,而不是缓存。

技术图片

 

 上面代码,主线程获取变量值到工作内存中,修改了变量后,并刷新到主内存中,但是,VolatileExample线程从主内存中复制的变量并未得到变量已经修改的通知,导致了多线程情况先变量不可见性。

 

JUC-volatile详解

标签:目的   共享   访问   false   可见   rgb   静态   rpc   except   

原文地址:https://www.cnblogs.com/xyzxy/p/14292343.html

版权声明:完美者 发表于 2021-01-19 11:58:55。
转载请注明:JUC-volatile详解 | 完美导航

暂无评论

暂无评论...