zoukankan      html  css  js  c++  java
  • volatile的一个例子-通俗易懂

    volatile 关键字的两层语义

    一旦一个共享变量(类的成员变量、类的静态成员变量)被 volatile 修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序

    方式一:变量不使用 volatile 修饰

    public class VolatileTest extends Thread {
        private static boolean flag = false;
    
        public void run() {
            while (!flag) ;
        }
    
        public static void main(String[] args) throws Exception {
            new VolatileTest().start();
            Thread.sleep(2000);
            flag = true;
        }
    }

    方式二:变量使用 volatile 修饰

    public class VolatileTest extends Thread {
        private static volatile boolean flag = false;
    
        public void run() {
            while (!flag) ;
        }
    
        public static void main(String[] args) throws Exception {
            new VolatileTest().start();
            Thread.sleep(2000);
            flag = true;
        }
    }

    运行结果
    方式一:线程不会结束

    方式二:线程会结束

  • 相关阅读:
    CSS 兼容 总结
    IF IE
    取消chrome浏览器下input和textarea的默认样式
    左右浮动边距为0,中间间隔一定
    标题右边10px位置紧跟发布时间
    两款CSS3样式可视化在线生成工具
    文字截取,多余文字用省略号(...)代替
    O
    N
    M
  • 原文地址:https://www.cnblogs.com/cat520/p/13568512.html
Copyright © 2011-2022 走看看