java內存模型,描述了java程序中各類變量(線程共享變量)的訪問規則。以及在jvm中將變量存儲到內存中讀取出變量這樣的底層細節。java
規定一:線程對共享變量的全部操做,都是在本身的工做內存中完成,不能直接從主內存中獲取。jvm
規定二:不一樣線程直接沒法直接訪問他線程工做內存中的變量,必須經過藉助主內存來完成。優化
定義:代碼書寫的順序,與執行的順序不一致,重排序是爲了使編譯器或處理器更高的效率執行程序。線程
1.編譯器優化的重排序(編譯器優化)3d
2.指令集並行的重排序(處理器優化)cdn
3.內存系統的重排序(處理器優化)blog
線程1對共享變量的修改想要被線程2及時看到,必須通過以下步驟:排序
JMM關於synchronized的兩條規定(保證線程在下次加鎖前獲取到的數據是最新的):內存
synchronized實現可見性(實現互斥): 步驟一:得到互斥鎖。 步驟二:清空工做內存。 步驟三:從主內存中copy最新的變量副本到工做內存。 步驟四: 執行代碼。 步驟五:將工做內存中的修改的共享變量同步更新到主內存中。 步驟六:釋放互斥鎖。編譯器
volatile關鍵字: