簡單說說你對Java內存模型的原子性的瞭解吧?

    Java內存模型保證non-long、non-double類型外的其餘任意類型的訪問都是原子性的。同時volatile long、volatile double訪問也是原子性的。java

 

參考資料:多線程

同步和Java內存模型 (二)原子性併發

除了long型字段和double型字段外,java內存模型確保訪問任意類型字段所對應的內存單元都是原子的。這包括引用其它對象的引用類型的字段。此外,volatile long 和volatile double也具備原子性 。(雖然java內存模型不保證non-volatile long 和 non-volatile double的原子性,固然它們在某些場合也具備原子性。)(譯註:non-volatile long在64位JVM,OS,CPU下具備原子性)atom

當在一個表達式中使用一個non-long或者non-double型字段時,原子性能夠確保你將得到這個字段的初始值或者某個線程對這個字段寫入以後的值;但不會是兩個或更多線程在同一時間對這個字段寫入以後產生混亂的結果值(即原子性能夠確保,獲取到的結果值所對應的全部bit位,所有都是由單個線程寫入的)。可是,以下面(譯註:指可見性章節)將要看到的,原子性不能確保你得到的是任意線程寫入以後的最新值。 所以,原子性保證一般對併發程序設計的影響很小。線程

相關文章
相關標籤/搜索