国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

【死磕Java并發】-----Java內存模型之總結

2019-11-06 08:18:23
字體:
來源:轉載
供稿:網友

經過四篇博客闡述,我相信各位對java內存模型有了最基本認識了,下面LZ就做一個比較簡單的總結。

總結

JMM規定了線程的工作內存和主內存的交互關系,以及線程之間的可見性和程序的執行順序。一方面,要為程序員提供足夠強的內存可見性保證;另一方面,對編譯器和處理器的限制要盡可能地放松。JMM對程序員屏蔽了CPU以及OS內存的使用問題,能夠使程序在不同的CPU和OS內存上都能夠達到預期的效果。

Java采用內存共享的模式來實現線程之間的通信。編譯器和處理器可以對程序進行重排序優化處理,但是需要遵守一些規則,不能隨意重排序。

原子性:一個操作或者多個操作要么全部執行要么全部不執行;

可見性:當多個線程同時訪問一個共享變量時,如果其中某個線程更改了該共享變量,其他線程應該可以立刻看到這個改變;

有序性:程序的執行要按照代碼的先后順序執行;

在并發編程模式中,勢必會遇到上面三個概念,JMM對原子性并沒有提供確切的解決方案,但是JMM解決了可見性和有序性,至于原子性則需要通過鎖或者Synchronized來解決了。

如果一個操作A的操作結果需要對操作B可見,那么我們就認為操作A和操作B之間存在happens-before關系,即A happens-before B。

happens-before原則是JMM中非常重要的一個原則,它是判斷數據是否存在競爭、線程是否安全的主要依據,依靠這個原則,我們可以解決在并發環境下兩個操作之間是否存在沖突的所有問題。JMM規定,兩個操作存在happens-before關系并不一定要A操作先于B操作執行,只要A操作的結果對B操作可見即可。

在程序運行過程中,為了執行的效率,編譯器和處理器是可以對程序進行一定的重排序,但是他們必須要滿足兩個條件:1 執行的結果保持不變,2 存在數據依賴的不能重排序。重排序是引起多線程不安全的一個重要因素。

同時順序一致性是一個比較理想化的參考模型,它為我們提供了強大而又有力的內存可見性保證,他主要有兩個特征:1 一個線程中的所有操作必須按照程序的順序來執行;2 所有線程都只能看到一個單一的操作執行順序,在順序一致性模型中,每個操作都必須原則執行且立刻對所有線程可見。

博文列表

【死磕Java并發】—–Java內存模型之happens-before 【死磕Java并發】—–Java內存模型之重排序 【死磕Java并發】—–Java內存模型之分析volatile 【死磕Java并發】—–Java內存模型之從JMM角度分析DCL

Java內存模型推薦資料

程曉明:深入Java內存模型周志明:深入理解Java虛擬機-第五部分 高效并發Java 并發編程:volatile的使用及其原理Java并發編程:volatile關鍵字解析聊聊高并發(三十三)Java內存模型那些事(一)從一致性(Consistency)的角度理解Java內存模型聊聊高并發(三十四)Java內存模型那些事(二)理解CPU高速緩存的工作原理聊聊高并發(三十五)Java內存模型那些事(三)理解內存屏障聊聊高并發(三十六)Java內存模型那些事(四)理解Happens-before規則happens-before俗解

歡迎掃一掃我的公眾號關注 — 及時得到博客訂閱哦!

–— Java成神之路: 488391811(一起走向Java成神) –— 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂昌县| 潼南县| 嵩明县| 苏尼特左旗| 正阳县| 彝良县| 马尔康县| 长兴县| 湖口县| 库伦旗| 延边| 莆田市| 正蓝旗| 呼和浩特市| 徐州市| 曲靖市| 福贡县| 景泰县| 健康| 晋中市| 望奎县| 明水县| 麻栗坡县| 怀化市| 岳阳市| 濉溪县| 胶南市| 正宁县| 浦县| 开封市| 林芝县| 巴林左旗| 连平县| 苏尼特左旗| 濮阳市| 永修县| 孝义市| 历史| 龙山县| 河曲县| 喀什市|