zoukankan      html  css  js  c++  java
  • volatile浅析

      volatile的意思是不稳定的、易变的,但在多线程中却跟字面意思一毛钱关系没有。作为一个变量修饰符,它主要有两个作用:一个是告诉大家,该变量是一个在多个线程之间均可见的变量;另一个是告诉java虚拟机,不要对该变量进行指令重排序优化。下面举个例子说明

    /**
     * 测试volatile的作用
     * 
     * @author wulinfeng
     * @version C10 2018年11月18日
     * @since SDP V300R003C10
     */
    public class VolatileTest
    {
        // 开关:是否继续执行
        private boolean isContinue = false;
        
        public boolean isContinue()
        {
            return isContinue;
        }
        
        public void setContinue(boolean isContinue)
        {
            this.isContinue = isContinue;
        }
        
        public VolatileTest(boolean isContinue)
        {
            this.isContinue = isContinue;
        }
        
        public void doSomething()
        {
            System.out.printf("%s: I'm coming for doing something.
    ", Thread.currentThread().getName());
            while (isContinue)
            {
            }
            System.out.printf("%s: I'm finished.
    ", Thread.currentThread().getName());
        }
        
        public static void main(String[] args)
            throws InterruptedException
        {
            final VolatileTest vt = new VolatileTest(true);
            new Thread()
            {
                @Override
                public void run()
                {
                    vt.doSomething();
                }
            }.start();
            Thread.sleep(1000);
            vt.setContinue(false);
            System.out.println("continue is false.");
        }
        
    }

      死循环了,输出结果:

      改下这一行:

    private volatile boolean isContinue = false;

      输出结果:

  • 相关阅读:
    jekins测试环境自动化
    jenkins
    git
    maven
    spring boot 1
    jmeter 常用函数
    Jmeter之BeanShell--请求失败触发报警邮件
    Python_任意文件中获取项目的绝对路径
    Python_logging在多模块项目中日志输出应用
    Python--判断Mysql启动状态并人工干预下完成启动
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/9978883.html
Copyright © 2011-2022 走看看