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上了...

    评论

报告相同问题?

悬赏问题

  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。
  • ¥15 GitHubssh虚拟机连接不上
  • ¥15 装完kali之后下载Google输入法 重启电脑后出现以下状况 且退不出去 桌面消失 反复重启没用
  • ¥15 ESP-IDP-BLE配网连接wifi