码迷,mamicode.com
首页 > 其他好文 > 详细

JUC-volatile详解

时间:2021-01-19 11:58:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:目的   共享   访问   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!