Java多線程 Java內(nèi)存模型相關常見面試題
什么是Java內(nèi)存模型?(重點)
c語言沒有內(nèi)存模型, 在多核情況下表現(xiàn)不一致.
有三種概念, JVM內(nèi)存結(jié)構, Java對象模型, Java內(nèi)存模型.
JVM內(nèi)存結(jié)構, Java對象模型可以點擊下面的鏈接查看.
JVM內(nèi)存結(jié)構, Java對象模型
JMM Java內(nèi)存模型可以點擊下面的鏈接.
JMM Java內(nèi)存模型
重排序 可見性 原子性 是JMM最主要的體現(xiàn),也是最重要的內(nèi)容.
可以講講重排序的例子和好處.
重點放在可見性上, 講講JMM的抽象, 抽象成了主內(nèi)存和工作內(nèi)存這兩塊.
再可以講講happens-before九大規(guī)則
happens-before九大規(guī)則
接著可以講講volatile關鍵字. volatile的適用場合 , 以及和synchronized的關系 .
synchronized不僅僅保證原子性, 并且保證可見性. ?并且把synchronized附近的代碼, 都可以做到同步的效果.
接著講講原子性
原子性介紹 ,Java中的原子性
volatile和synchronized的異同
volatile和synchronized的異同
原子性
什么是原子性, Java中有哪些原子性操作, 生成對象的過程是不是原子性操作,
原子性介紹 ,Java中的原子性
生成對象不是原子性操作
64位的double 和long 寫入的時候一定是原子的嗎?
Java中沒有規(guī)定一定是原子性的, 那么在寫入的時候, 可能會出現(xiàn)前32位和后32位錯位的情況.
但是在實際的生產(chǎn)環(huán)境中, 都是原子性的, 因此在實際的開發(fā)中, 不需要對double和long進行額外的保證原子性的操作.
可見性
什么是內(nèi)存可見性?
可見性demo
可見性問題出現(xiàn)的原因