1.volatile讲解

概念

volatile是java中的关键字,是一个变量修饰符,被用来修饰会被不同线程访问和修改的变量

作用

1) 可见性

可见性是多个线程访问同一个变量时,其中一个线程修改了该变量的值,其他线程能够立即看到修改的值例子:


class VolatileTestObj {
    private static volatile boolean flag = true;

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            System.out.println("当前线程: "+Thread.currentThread().getName());
            while (flag) {
            }
            System.out.println("server end");
        }, "server").start();

        Thread.sleep(1000);
        new Thread(() -> {
            System.out.println("当前线程: "+Thread.currentThread().getName());
            while (!flag) {
                System.out.println("server2 改为true");
                flag = true;
            }
        }, "server2").start();
        System.out.println("主线程改为false");
        flag = false;
    }
}

2) 原子性

volatile是无法保证原子性的

3) 有序性(防止jvm虚拟机的指令重排)

有序性: 即程序执行的顺序按照代码的先后顺序来执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容