-
併發編程模型的分類
- 命令式編程中,線程之間通信方式有兩種:共享內存和消息傳遞。
- 在共享內存的併發模型裏,線程之間共享程序的公共狀態,線程之間通過寫-讀內存中的公共狀態來隱式進行通信。
- 在消息傳遞的併發模型裏,線程之間沒有公共狀態,線程之間必須通過明確的發送消息來顯式進行通信。
- 同步是指程序用於控制不同線程之間操作發生相對順序的機制。(即串行化線程對主內存的操作)
- 在共享內存併發模型裏,同步是顯式進行的。程序員必須顯式指定某個方法或某段代碼需要在線程之間互斥執行。
- 在消息傳遞的併發模型裏,由於消息的發送必須在消息的接收之前, 因此同步是隱式進行的。
- Java 的併發採用的是共享內存模型,Java 線程之間的通信總是隱式進行,整個通信過程對程序員完全透明。如果編寫多線程程序的 Java 程序員不理解隱式進行的線程之間通信的工作機制,很可能會遇到各種奇怪的內存可見性問題。
-
主內存與工作內存
- Java內存模型規定了所有的變量都存儲在主內存中。
- 每條線程有自己獨自的工作內存,工作內存中保存了該線程所使用到變量的主內存副本拷貝。因此,線程對變量的所有操作都必須在工作內存中進行,不可直接操作主內存的變量。所以,不同線程之間也無法直接訪問對方的工作內存變量,線程間的變量值的傳遞需要通過主內存來完成。
- 線程、工作內存與主內存的交互圖
-
參考
- 深入理解Java內存模型
- 深入理解Java虛擬機
java內存模型淺談
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.