zoukankan      html  css  js  c++  java
  • JUC-volatile详解

         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线程从主内存中复制的变量并未得到变量已经修改的通知,导致了多线程情况先变量不可见性。

  • 相关阅读:
    css3新特性
    线程间通信的三种方法
    硬件相关知识
    time.h
    ldr指令总结
    你不知道的100个小秘密
    ARM学习日记
    C中位域的使用
    《编程之美》第2刷勘误
    排序2
  • 原文地址:https://www.cnblogs.com/xyzxy/p/14292343.html
Copyright © 2011-2022 走看看