操作系统的内存大致可以看成主存(内存条上的内存),cpu的缓存。当多个核心访问主存中的变量时,需要把主存中的值拷贝的每个核心的cpu缓存上,每个核心的缓存之间互相是不可见的,当修改的时候需要把值刷新到主存上其他的线程才看的到,在底层其实还有更多的操作,我只是简单的说了一下。
JVM已经帮我们封装了很多操作,但还不够所有有了 volatile 这个关键词,可以保持变量的可见性
使用同步锁的方法来操作变量也是保持内存可见性的,因为在一个线程操作变量时其他线程都在等待池等待,只有这个操作完成了,其他线程才可以访问,同步锁即保证了可见性,也保证了原子性,也保证了线程安全