volatile

作者: YAOPRINCESS | 来源:发表于2020-09-10 22:37 被阅读0次

    不加volatile时,打印不了成功
    因为两个线程中的工作内存都有initFLag副本,其中一个变了对另一个并没有影响

    package com.kang.jmm;
    
    /**
     * @author klr
     * @create 2020-09-10-22:23
     */
    public class VolatileVisibility {
    //    private static  boolean initFlag = false;
        private static volatile boolean initFlag = false;
    
    
        //两个线程时,每个线程都有自己的变量副本值
        public static void main(String[] args) throws InterruptedException {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("还未准备数据");
                    while (!initFlag) {
    
                    }
                    System.out.println("成功");//不加volatile时,执行不了这句话,因为initFlag是在第二个线程中变的,并不能影响到第一个线程的initFlag
                }
            }).start();
            Thread.sleep(2000);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("准备数据中");
                    initFlag=true;
                    System.out.println("数据完成");
                }
            }).start();
        }
    }
    

    相关文章

      网友评论

          本文标题:volatile

          本文链接:https://www.haomeiwen.com/subject/fcmmektx.html