目錄 1. 餓漢模式 (Eager Initialization) 2. 懶漢模式 - 單線程版 (Lazy Initialization) 3. 懶漢模式 - 多線程加鎖版 (Synchronized) 4. 懶漢模式 - 雙重檢查鎖 + Volatile (Double-Checked Locking) —— 最終推薦版
一、發軔之始 在工作和生活中,我們可能經常會遇到一些場景,我們在搜索引擎中輸入問題尋求解決方案,返回的卻是大量重複的、基礎性的、甚至是商業推廣的內容。無奈的反覆修正我們的檢索內容,就是找不到答案,這確實是一大困擾,由於算法的侷限性和商業干擾,導致搜索引擎算法傾向於流行度而非質量,商業利益常常凌駕於信息價值之上。我們得到的往往是最多人點擊的,而不是最正確的。
Java 內存模型(JMM)主要通過 禁止指令重排序 和 建立 happens-before 規則 來保證有序性,核心手段包括 volatile 關鍵字、synchronized 關鍵字和 final 關鍵字等。 一、有序性問題的根源 有序性問題的根源是 CPU 指令重排序。為了優化性能,CPU 會在不影響單線程執行結果的前提下,調整指令的執行順序。例如: