java內存模型淺談

  • 併發編程模型的分類

    • 命令式編程中,線程之間通信方式有兩種:共享內存和消息傳遞。
    • 在共享內存的併發模型裏,線程之間共享程序的公共狀態,線程之間通過寫-讀內存中的公共狀態來隱式進行通信。
    • 在消息傳遞的併發模型裏,線程之間沒有公共狀態,線程之間必須通過明確的發送消息來顯式進行通信。
    • 同步是指程序用於控制不同線程之間操作發生相對順序的機制。(即串行化線程對主內存的操作)
    • 在共享內存併發模型裏,同步是顯式進行的。程序員必須顯式指定某個方法或某段代碼需要在線程之間互斥執行。
    • 在消息傳遞的併發模型裏,由於消息的發送必須在消息的接收之前, 因此同步是隱式進行的。
    • Java 的併發採用的是共享內存模型,Java 線程之間的通信總是隱式進行,整個通信過程對程序員完全透明。如果編寫多線程程序的 Java 程序員不理解隱式進行的線程之間通信的工作機制,很可能會遇到各種奇怪的內存可見性問題。
  • 主內存與工作內存

    • Java內存模型規定了所有的變量都存儲在主內存中。
    • 每條線程有自己獨自的工作內存,工作內存中保存了該線程所使用到變量的主內存副本拷貝。因此,線程對變量的所有操作都必須在工作內存中進行,不可直接操作主內存的變量。所以,不同線程之間也無法直接訪問對方的工作內存變量,線程間的變量值的傳遞需要通過主內存來完成。
    • 線程、工作內存與主內存的交互圖線程、工作內存與主內存的交互圖
  • 參考

    • 深入理解Java內存模型
    • 深入理解Java虛擬機
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章