第一个问题,线程a执行下面第一个代码,线程B执行第二个,只打印a=2这种情况,我可不可以理解为线程A只在第一次读取a变量时从主内存中读,然后保存副本修改,在打印时不会读主内存,所以打印只为2,不会出现3的情况。


第二个问题:代码在上面基础上多了一个 b = a的操作,然后打印出了3,2,想了半天出现这个结果只可能是因为在打印时从主内存中读取了a的值,然后就和上面第一个问题矛盾了



第三个问题,上面第二个问题的代码还有一个结果打印出1,1的结果,这不就违反了单线程happen-before原则了吗,老师帮忙解释下,最好详细点,我有点晕