多核主机上每个CPU都有自己的缓存,在操作内存变量时需要先从内存加载到CPU缓存,操作完成后再从CPU缓存更新到内存,如果多个线程同时在不同的CPU上操作,那么看到的数据就有可能不一样。如图:
T1两个线程都从内存读取到变量V。 T2线程A修改了变量V,但还未同步到内存中,此时线程B再次修改变量V,由于不是在线程A修改的结果上进行修改,就有可能导致错误,例如两者都对变量V+1。
如果要解决变量可见性问题: 1.变量通过volatile关键字修饰 2.操作方法同步
以上解决方法后面详细介绍。