简单说说你对Java内存模型的原子性的了解吧?
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
? ? Java內(nèi)存模型保證non-long、non-double類型外的其他任意類型的訪問都是原子性的。同時volatile long、volatile double訪問也是原子性的。
?
參考資料:
同步和Java內(nèi)存模型 (二)原子性
除了long型字段和double型字段外,java內(nèi)存模型確保訪問任意類型字段所對應(yīng)的內(nèi)存單元都是原子的。這包括引用其它對象的引用類型的字段。此外,volatile long 和volatile double也具有原子性 。(雖然java內(nèi)存模型不保證non-volatile long 和 non-volatile double的原子性,當(dāng)然它們在某些場合也具有原子性。)(譯注:non-volatile long在64位JVM,OS,CPU下具有原子性)
當(dāng)在一個表達(dá)式中使用一個non-long或者non-double型字段時,原子性可以確保你將獲得這個字段的初始值或者某個線程對這個字段寫入之后的值;但不會是兩個或更多線程在同一時間對這個字段寫入之后產(chǎn)生混亂的結(jié)果值(即原子性可以確保,獲取到的結(jié)果值所對應(yīng)的所有bit位,全部都是由單個線程寫入的)。但是,如下面(譯注:指可見性章節(jié))將要看到的,原子性不能確保你獲得的是任意線程寫入之后的最新值。 因此,原子性保證通常對并發(fā)程序設(shè)計的影響很小。
轉(zhuǎn)載于:https://my.oschina.net/u/914290/blog/803287
總結(jié)
以上是生活随笔為你收集整理的简单说说你对Java内存模型的原子性的了解吧?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于面向过程编程的一些思考
- 下一篇: 共享单车开启混战模式,谁能笑到最后?