JMM JAVA Memory Model java內存模型
作用:緩存一致性協議,用于定義數據讀寫的規則(遵守,找到這個規則)
JMM定義了線程2工作內存和主內存之間的抽象關系:線程之間的共享變量存儲在主內存(main Memory) 中,每一個線程都有一個私有的本地內存(Local Memory)
解決共享對象可見性這個問題:volilate
voliate關鍵字的作用:
一、內存可見性
基于緩存一致性協議,當用voliate關鍵字修飾的變量改動時,cpu會通知其他線程,緩存已被修改,需要更新緩存。這樣每個線程都能獲取到最新的變量值。
二、基于內存屏障的防止指令重排
用voliate修飾的變量,可以防止cpu指令重排序。底層的實現方式是基于4種內存屏障:讀讀、讀寫、寫讀、讀讀屏障。