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;

  输出结果:

原文地址:https://www.cnblogs.com/wuxun1997/p/9978883.html