weixin_44089714 2021-07-06 18:12 采纳率: 16.7%
浏览 23

不理解volatile的传递性是什么意思

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的写是可见的,也就是说第一个死循环会结束。
但是实际测试发现不会停下来
这是为什么呢?

  • 写回答

2条回答 默认 最新

  • 得一以生 2021-07-06 19:42
    关注

    亲,你再好好看看volatile你加在x上了,还是y上了...

    评论

报告相同问题?