背景知識:
主內(nèi)存與工作內(nèi)存
Java程序在工作中,變量存儲在主內(nèi)存, 多線程場景下,每個線程有一個私有的工作內(nèi)存
每個線程對數(shù)據(jù)的操作都先發(fā)生在自己的工作內(nèi)存
然后再寫回主內(nèi)存
舉個例子:
如下圖, 三個線程同時訪問student對象的age屬性,一個線程在自己的工作內(nèi)存把25改成37
然后將37 寫回主內(nèi)存

所謂可見性
是JMM 要讓所有線程立刻知道,主內(nèi)存中原來25的數(shù)值變成了37
什么是JMM
Java Memory Model? Java內(nèi)存模型
是不存在的抽象的概念,
描述的是管理內(nèi)存的規(guī)范,
規(guī)定了程序中各個變量(實例字段,靜態(tài)字段,構(gòu)成數(shù)組對象的元素) 的訪問方式
JMM 規(guī)定 線程 解鎖前,需要將共享變量的數(shù)值刷新會主內(nèi)存
線程加鎖前,需要將主內(nèi)存的最新值寫道自己的工作內(nèi)存
加鎖解鎖是同一把鎖
JMM 保證了
可見性
原子性
有序性