2019年1月19日 星期六

(書籤) Java Memory Model

很久沒用到,覺得已經不太記得細節了…。一般在工作上會優先架構成能夠允許最終一致性的狀況,不過如果遇到強一致性的多執行緒需求,還是必須考慮到 Java Memory Model。

大體上來說,因為硬體上 Thread 會有自己的本地快取,因此在不同 Thread 間對同個物件的「視野」可能是不同的。概念上很像是在資料庫上會遇到兩個 Transaction 看見的內容不同的那種狀況。由於硬體終究會將本地快取 flush 回主記憶體,所以最終還是會保持一致性,只是在過程中不見得永遠會滿足執行緒間的一致性,這時就需要 volatile 登場了。

參考資料
  1. Wikipedia - Java memory model
  2. Java Memory Model
  3. 深入理解 Java 内存模型(一)——基础
  4. Stack Memory and Heap Space in Java
  5. Difference between volatile and synchronized in Java
    1. JAVA多執行緒之volatile 與 synchronized 的比較
    2. Volatile vs Static in Java

    沒有留言: