想问下这段java代码要如何解释a的输出结果为1,这里我想过其实有两种可能性
一种是thread1中的 a = 2 和sout("thread1结束了")执行顺序互换了,但是volatitle关键字修饰的a具有有序性,所以应该是不可能的
第二种是a的值读的是旧缓存的值,但volatitle关键值使得a具有可见性,而sout又是加了锁的,所以在thread1里的sout("thread1结束了")执行时加了锁,而这时a又变成了2,这时锁释放,再执行thread里的sout(a),所以也应该时显示为2才对
除此之外没有想到其他可能性了,本人对并发编程这块不是很精通,所以想问下各位大佬对此有何见解