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

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

    方式二:线程会结束

  • 相关阅读:
    JSP
    Map集合的四种遍历
    过滤器和监听器
    Web常用对象(2)
    Web常用对象(1)
    Java Web了解和Servlet初次见面
    面向对象之继承(1)
    SpringBoot使用简单缓存
    SpringBoot整合mybatis
    Spring Security 入门学习--数据库认证和授权
  • 原文地址:https://www.cnblogs.com/cat520/p/13568512.html
Copyright © 2011-2022 走看看