- 并發(fā)編程模型分類:
- 共享內(nèi)存:線程之間共享程序的公共狀態(tài),線程之間通過寫-讀內(nèi) 存中的公共狀態(tài)來隱式進(jìn)行通信
- 消息傳遞:線程之間沒有公共狀 態(tài),線程之間必須通過明確的發(fā)送消息來顯式進(jìn)行通信
在此
Java采用的是共享內(nèi)存的模型。
-
Java內(nèi)存模型的抽象
線程之間共享存儲在主內(nèi)存中,每個線程都有一個私有的本地內(nèi)存,本地內(nèi)存 中存儲了該線程以讀/寫共享變量的副本伞矩。本地內(nèi)存是 JMM 的一個抽象概念,并不 真實(shí)存在夏志。它涵蓋了緩存乃坤,寫緩沖區(qū),寄存器以及其他的硬件和編譯器優(yōu)化盲镶。示意圖如下:
線程A和線程B通訊示意圖
- 重排序
為了提高性能一般會進(jìn)行三重對指令集的重排序 - 編譯優(yōu)化的重排序
- 指令集并行重排序
- 內(nèi)存系統(tǒng)重排序
- 內(nèi)存屏障
- load load barriers
- store store barriers
- load store barriers
- store load brarriers
- happen-before原則
- 同一線程中侥袜,當(dāng)前操作happen-before任意后續(xù)操作
- 對一個監(jiān)視器的解鎖蝌诡,happen-before對這個監(jiān)視器的加鎖
- volatile變量原則
- 傳遞性