Skip to content

Latest commit

 

History

History
103 lines (68 loc) · 2.58 KB

1.Volatile关键字.md

File metadata and controls

103 lines (68 loc) · 2.58 KB

Volatile关键字说明

1.volatile关键是一种相较于synchronized较为轻量级的同步策略。

2.volatile 不具备互斥性,volatile不能保证变量的原子性。

3.volatile关键字保证了不同的线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新的值对于所有线程是可见的。

4.volatile禁止指令重排。

Volatile关键字代码示例

未使用volatile关键字代码

public class VolatileDemo {

    private static boolean flag = false;

    public static void main(String[] args) {
        System.out.printf("当前线程为:[%s]\n", Thread.currentThread().getName());

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (!flag);
                System.out.printf("当前线程为:[%s]\n", Thread.currentThread().getName());
            }
        }).start();
        sleep(2000);
        flag = true;
    }

    private static void sleep(int time) {
         try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

未使用volatile关键字结果

image-20210413215609842

使用volatile关键字代码

public class VolatileDemo {

    private static volatile boolean flag = false;

    public static void main(String[] args) {
        System.out.printf("当前线程为:[%s]\n", Thread.currentThread().getName());

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (!flag);
                System.out.printf("当前线程为:[%s]\n", Thread.currentThread().getName());
            }
        }).start();
        sleep(2000);
        flag = true;
    }

    private static void sleep(int time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

使用volatile关键字结果

image-20210413220908238

Volatile关键字详解

参考文章

多级cache结构 -> 缓存一致性协议(MESI)-> store buffer和invalidate queue -> 内存屏障

https://www.cnblogs.com/xrq730/p/7048693.html

https://juejin.cn/post/6844903520760496141

https://crossoverjie.top/2018/03/09/volatile/

https://www.cnblogs.com/dolphin0520/p/3920373.html

https://www.cnblogs.com/xrq730/p/7048693.html