JMM关于synchronized的两条规定: 1)线程解锁前,必须把共享变量的最新值刷新到主内存中 2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值 (注意:加锁与解锁需要是同一把锁) 通过以上两点,可以看到synchronized能够实现可见性.同时,由于synchronized具有同步锁,所以它也具有原子性 多线程中程序交错执行时,重排序可能会造成内存可见性问题 接下来我们看一段代码: /** * synchronized能够实现原子性(同步)…