volatile的知識點

2021-10-22 09:55:27 字數 498 閱讀 8100

三、記憶體屏障

由於cpu讀取記憶體的速度遠遠高於從磁碟讀取資料到記憶體的速度,因此從磁碟獲取資料到記憶體成為cpu執行效率的瓶頸。

jmm中為了提高效率,提出記憶體中的快取協議。每個虛擬機器中的執行緒都有自己的工作緩衝區,乙個叫做l1 cache,該緩衝去的資料僅僅有本執行緒可見,另乙個叫做l2 cache,目的是提高訪問效率,還有乙個記憶體去是屬於執行緒所在程序的主記憶體。這裡可以定義多個執行緒之間共享的變數。

由於引入了多級換快取,因此也帶來了一致性問題。

通常執行緒訪問共享變數的流程步驟如下:

1、從主記憶體中複製共享變數到工作記憶體,依次經過l2,l1緩衝區

2、在l1中對資料進行處理

3、如果資料被修改,則寫回主記憶體中

因為上述步驟產生資料儲存的流程上的時間上的差異及滯後性,各個執行緒可能回看到不同的共享變數的值,從而引發不一致。

Java基礎整理 volatile知識點總結

volatile特性 為什麼保證可見性 無法解決執行緒安全問題 當出現多寫場景時無法保證原子性 public class test public static void main string args start while thread.activecount 1 保證前面的執行緒都執行完 th...

TestLink知識點Mantis知識點

testlink知識點 1 testlink系統提供了六種角色 a guest 只有讀的許可權,適合於檢視測試用例和測試需求,以及專案分析的使用者。b testdesigner 可以開展測試用例和測試需求的所有工作。c tester 只能執行測試用例。d senior tester 可以檢視和維護測...

volatile的一點小知識

volatile是輕量級的synchronized。彙編指令中會加入lock字首避免指令重排並把寫緩衝區的所有資料重新整理到記憶體中保證可見性,但不保證原子性。記憶體屏障 一組處理器指令,實現對記憶體操作的順序限制。有volatile修飾的變數,在進行寫操作時,會發生兩件事 lock字首指令會引起處...