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;
        }
    }

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

    方式二:线程会结束

  • 相关阅读:
    程序员必备工具之Cmder
    Markdown简明教程
    几种黑灰名词解释
    windows下 mysql启动错误1067进程意外终止
    Mac OS 安装redis
    java里的这些
    maven 两条命令建立 web项目
    判断StringBuilder是否为空
    map与list的交集、补集操作
    关于创业
  • 原文地址:https://www.cnblogs.com/cat520/p/13568512.html
Copyright © 2011-2022 走看看