1. 程式人生 > >[筆記][思維導圖]讀深入理解JAVA記憶體模型整理的思維導圖

[筆記][思維導圖]讀深入理解JAVA記憶體模型整理的思維導圖

本人記憶差,整理這個思維導圖,相當於較認真的看了一遍,整個思維導圖,基本上就是對原文的拷貝。
有了層級關係。和本人自己的一些理解。由於思維導圖弄出來的圖片大於100M了。所以就放出原始檔,
更方便的閱讀查閱。免積分下載:http://download.csdn.net/detail/mr_zhuqiang/8945087 (我很無語啊。以前的確是免積分,不知道啥時候變成5積分了。也不知道怎麼修改成0積分)

有幾點我覺得是看這個本書或則思維導圖。你要明白的是:
1. 什麼是記憶體可見性
2. 在java程式中,在底層執行的程式碼指令並不是完全按照順序執行的-有重排序的存在
3. volatile 是一個和硬體的位數、資料的位數相關的概念,實際上和多執行緒是無關。

例:long:64位,在32位的硬體上操作long需要兩次來往(暫存器和記憶體間),就可以需要volatile(多執行緒)來保證當前執行緒完全寫入64位,其它執行緒才能讀或寫在64位硬體上操作long(64位),用不用volatile一點影響都沒有(機器指令已經保證了這一點)
如果這個無誤的話,那麼就驗證了 volatile的兩個特性,可見性和原子性。然而,想用程式碼來展示出錯效果的話,貌似寫不出來,
有用volatile來保證同步性的。但是這個的確是誤用的,volatile只是保證該變數的讀寫,並不保證 複合操作的同步性。所以應該記住volatile的兩個特性就行了

4.正是因為有了重排序和資料競爭才出現了多執行緒併發安全問題
5.什麼是逸出?:物件還沒構造完成 引用已經被其他地方使用了 - 稱為逸出
6.final的修飾的變數正確的初始化方法
下面是整理的思維導圖層級截圖展示
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述