我叫城北徐公 2019-11-06 19:54 采纳率: 0%
浏览 482

关于Synchronized的原子性与可见性问题

从CSDN的某N篇博客上看到,当执行synchronized代码块时,会经历一下几个步骤:1 获得同步锁
2 清空工作内存
3 从主存拷贝变量副本到工作内存
4 对这些变量计算
5 将变量从工作内存写回到主存
6 释放锁

但是如果这么说的话我就有疑问了

class test{
    public static void main(String[] args) {
        test2 test2 = new test2();
        //此时a可能并没有从本地副本中刷新到主内存
        test2.a = 5;
        synchronized (test.class) {
        //清空工作空间的值,也就是把a清除
        //从内存中重新读取a的值,a应该为0啊,为什么是5?
        System.out.println(test2.a);
        }
        System.out.println(test2.a);
    }
}
class test2{
    public int a = 0;
}
  • 写回答

1条回答 默认 最新

  • sweet_tr 2020-07-08 14:30
    关注

    个人理解,工作内存的值改变后会同步到主内存

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器