我叫城北徐公 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 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题