volatile可以保證多線程訪問的變量的可見性以及禁止指令重排序。
JVM層面的實現細節:
StoreStoreBarrier LoadLoadBarrier
volatile寫操作 volatile讀操作
StoreLoadBarrier LoadStoreBarrier
CPU層面的實現細節:
是採用lock 彙編指令操作,lock add dword ptr [rsp],0h
爲了更好的理解volatile,需要了解下CPU緩存的知識;
CPU緩存的出現主要是爲了解決CPU運算速度與內存讀寫速度不匹配的矛盾;常用的CPU內部都有L1緩存、L2緩存有些CPU架構還存在L3緩存。也就是線程的工作內存通常包含:寄存器、L1緩存、L2緩存、L3緩存。
上面部分是自己的一些總結。
具體的詳情細節,還是前輩整理的更好。共勉學習!
原文地址http://www.cnblogs.com/xrq730/p/7048693.html,轉載請註明出處,謝謝