正确使用volatile场景--状态标志

同步机制:volatile

特点:可见性;不具备原子性

每个线程有自己单独的内存;如果线程1和线程2公用一个变量name;如果两个线程并发进行,并且需要访问变量name;如果这个变量具有了可见性,线程1和线程2就可以获取到实时的变量name的最新数据;

下边这篇博客的结论说明了 volatile并不适合使用在并发当中,不能解决安全性问题

http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html

安全使用volatile的模式一:状态标志

public class HelloWorld {
    public static void main(String[] args) {
        TimeDemo.runTime();
    }
}
public class ThreadTest {
    public static volatile boolean FLAG = true;
    public Thread Thread1(){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                Task.ASTAT = false;
            }
        });
        return thread;
    }
    public Thread Thread2(){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.print("线程2获得状态AStat=" + Task.ASTAT);
            }
        });
        return thread;
    }
}

线程2中可以获取到线程1更改的数据;这个例子写的确实不太好啊;偶然性太大;

先记录,在修改吧

原文地址:https://www.cnblogs.com/fooller/p/7426547.html