top啦它 2022-03-10 08:58 采纳率: 73.7%
浏览 24
已结题

volatile在高并发环境下能保证可见性和指令重拍吗?


package fangfa;

import java.util.concurrent.CountDownLatch;

public class Ljsdjj24324 {
    public static void main(String[] args) throws InterruptedException {
        Hasdy hasdy = new Hasdy();
        CountDownLatch countDownLatch = new CountDownLatch(9999);
        for (int i = 0; i < 9999; i++) {
            new Thread(()->{
                for (int i1 = 0; i1 < 100; i1++) {
                    hasdy.setaaa();
                }
                countDownLatch.countDown();
            }).start();
        }
        countDownLatch.await();
        Thread.sleep(5000);
        System.out.println(hasdy.getasd());
    }
}
class Hasdy{
    volatile int a = 1;
    void setaaa(){
        a+=1;
    }
    int getasd(){
        return a;
    }
}

volatile并没有保证多线程安全
为什么会这样。
根据Happens-Before规则,先开启的线程对数据的修改对后续线程应该是可见的啊
难道是我理解错了吗?

  • 写回答

3条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 3月21日
      • 已采纳回答 3月13日
      • 创建了问题 3月10日

      悬赏问题

      • ¥15 关于#数据库#的问题:
      • ¥400 Windows 外围设备的KMDF驱动中,使用SPB框架实现的客户端驱动,怎样实现代码设定SPI的速率
      • ¥15 下载CSGO服务端时出错
      • ¥20 esp8266知心天气blinker上面显示
      • ¥20 python代码的实现讲解
      • ¥20 python代码实现,讲解
      • ¥30 六足机器人硬件配置问题
      • ¥15 uniapp ios端配置universal link无法唤起app
      • ¥70 java通过ISUP SDK开发连接海康威视获取PS封装流如何推送到web页面
      • ¥15 并且拖拽过去在picturebox上的数据也可以实现拖拽换位置的功能,