static int x = 0;
volatile static int y = 0;
public static void main(String[] args) throws InterruptedException {
new Thread(() -> {
while (x == 0) {
}
}).start();
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() -> {
log.debug("改变值");
x = 1;
y = 1;
}).start();
}
上面代码 y变量加了volatile,x没有,一个线程一直循环判断x的值
另一个线程3s后改变x和y的值,我看好多例子说第二个线程改变x的值由于volatile的传递性,前一个线程对于x的写是可见的,也就是说第一个死循环会结束。
但是实际测试发现不会停下来
这是为什么呢?