共被编辑 1 次

版本 更新时间 贡献者 编辑原因 操作
#r1 2018年12月11日 谁笑得很巴黎12 创建问题 查看

volatile修饰对象和数组能保证其内部元素的可见性?

题目描述

volatile修饰对象和数组时,只是保证其引用地址的可见性,可为什么我加了volatile之后下面的代码会马上打印“结束”,如果不给数组加volatile就永远不会打印。volatile修饰对象和数组时,线程对其域或元素操作的详细步骤是什么?求大神指点

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
public class b {

public static volatile int[] ints = new int[5];
public static void main(String[] args) throws Exception {
    Object o = new Object();
    new Thread(() -> {
        //线程A
        try {
            TimeUnit.MILLISECONDS.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
       ints[0] = 2;
    }).start();
    new Thread(() -> {            //线程B
        while (true) {
            if (ints[0] == 2) {
                System.out.println("结束");
                break;
            }
        }
    }).start();
}

}