Volatile关键字可见性

Volatile关键字可见性

Java中volatile关键字用来修饰需要在多个线程之间保证修改可见性,但它不仅仅只用来保证被volatile修饰的变量,也可以保证同类实例中其他变量的可见性。

class MyTest{
    static class MyClass{
        public  int years;
        private int months;
        private volatile int days;

        public void update(){
            years++;
            days++;
            months++;
        }

        @Override
        public String toString() {
            return "MyClass{" +
                    "years=" + years +
                    ", months=" + months +
                    ", days=" + days +
                    '}';
        }
    }
    public static void main(String[] args) throws InterruptedException {
        MyClass myClazz = new MyClass();
        new Thread(()->{
            myClazz.update();
        }).start();
        while(myClazz.years==0){ }
        System.out.println(myClazz);
    }
    //运行结果:
    //MyClass{years=1, months=1, days=1}
}

从结果可以看出来,Mian线程知道了myClazz实例的volatile变量被修改了,并且days、months这些非volatile变量的修改也被发现了。

你可能感兴趣的:(学习日记,多线程,java,并发编程)