1.我们都知道,jmm的存在导致java的线程其实读取的都是本地的副本(为何出现jmm,其实是为了实现平台一致性),因此会出现可见性问题。
2.猜想:那么加了synchronized后,如果还不能保证可见性,那就没有办法保证可见性了呀!
3.其实,synchronized在修改了本地内存的变量后,解锁前会把本地内存修改的内容刷新到主内存中,确保了共享变量的值是最新的,也就保证了可见性。
----------------
思考xdb中:
select:其实也是上锁,因此必定能读到最新的数据,毕竟是加锁了,是保证可见性的。
get: 修改时加锁,这样子也保证能取到最新的数据,毕竟想修改则加锁,是保证可见性的。
这样子都会得到最新的数据。