java內存模型 JMM
624
2025-04-05
第3章
Java內存模型
Java線程之間的通信對程序員完全透明,內存可見性問題很容易困擾Java程序員,本章將揭開Java內存模型神秘的面紗。本章大致分4部分:Java內存模型的基礎,主要介紹內存模型相關的基本概念;Java內存模型中的順序一致性,主要介紹重排序與順序一致性內存模型;同步原語,主要介紹3個同步原語(synchronized、volatile和final)的內存語義及重排序規則在處理器中的實現;Java內存模型的設計,主要介紹Java內存模型的設計原理,及其與處理器內存模型和順序一致性內存模型的關系。
3.1 Java內存模型的基礎
3.1.1 并發編程模型的兩個關鍵問題
在并發編程中,需要處理兩個關鍵問題:線程之間如何通信及線程之間如何同步(這里的線程是指并發執行的活動實體)。通信是指線程之間以何種機制來交換信息。在命令式編程中,線程之間的通信機制有兩種:共享內存和消息傳遞。
在共享內存的并發模型里,線程之間共享程序的公共狀態,通過寫-讀內存中的公共狀態進行隱式通信。在消息傳遞的并發模型里,線程之間沒有公共狀態,線程之間必須通過發送消息來顯式進行通信。
同步是指程序中用于控制不同線程間操作發生相對順序的機制。在共享內存并發模型里,同步是顯式進行的。程序員必須顯式指定某個方法或某段代碼需要在線程之間互斥執行。在消息傳遞的并發模型里,由于消息的發送必須在消息的接收之前,因此同步是隱式進行的。
Java的并發采用的是共享內存模型,Java線程之間的通信總是隱式進行,整個通信過程對程序員完全透明。如果編寫多線程程序的Java程序員不理解隱式進行的線程之間通信的工作機制,很可能會遇到各種奇怪的內存可見性問題。
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。