Java多線程實現基礎(二)

Java內存模型

基本概念

1. 線程通信
   線程之間以何種方式進行消息傳遞
   共享內存 & 消息傳遞
   
2. 線程同步
   程序間用于控制不同線程間操作發生相對順序的機制
   
   java是共享內存模型】采用的是隱式通信、顯式修改
   
   jvm定義了線程和主內存(Main Memory)之間的關系:
   1) 線程之間的共享變量存儲在主內存中
   2) 線程私有變量存儲在私有本地內存 Local Memory中、
      本地內存是jvm的一個抽象概念、并非真實存在、涵蓋緩存、緩沖區、寄存器及其它硬件及編譯器優化
   Java同步原語(synchronize volatile  final)

指令重排

1. 編譯器重排
   在不改變單線程語義的條件下、編譯器可以重排指令的執行順序
2. 指令重排 
   現代cpu采用了指令級并行技術、可以同時執行多條指令、若無數據依賴、
   處理器可以改變機器指令的執行順序
3. 內存系統的重排
   由于處理器采用緩存和讀寫緩沖區、使得加載和存儲操作看上去是亂序的、
   可能在亂序執行

jvm 指令執行

未使用同步的程序在jvm中的執行基本無序、
1. jvm不保證單線程內的操作會按照程序代碼順序執行、臨界區指令重排
2. jvm不保證所有線程看到的執行順序一致
3. jvm不保證64位的long、double類型寫操作具有原子性

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容