jvm中volatile關鍵字原理與併發編程介紹

volatile關鍵字原理介紹:

在深入理解Java虛擬機書中有這樣一種說法:
加入volatile關鍵字與不加volatile相比,加了之後生成的彙編代碼多了一個lock前綴的指令,此指令就相當於一個內存隔板,
這個內存隔板可以確保jvm指令進行優化重排序時不會把其後面的指令排到其之前,也不會把其前面的指令排到其後面,而且他會強制的把對線程工作內存區的修改立即寫道主存中,當我們對某個特定一處進行寫操作時,它會導致其他CPU中對應的緩存無效

java併發編程:

併發編程的三個特點:原子性、可見性、有序性

1)原子性:

原子性就是要麼成功、要麼失敗,java中原子性操作的話java內存模型保證了基本數據的原子性操作,原子性操作我們可以藉助synchronized、Lock來實現原子性操作

2)可見性:

可見性的話就是如果一個共享變量被修改時,他會立即把修改後的值刷到主存中去,來供提供最新狀態

3)有序性:

由於java內存模型爲了性能考慮,選擇了允許編譯器和處理器對指令進行重排優化,這個重排對單線程是沒有任何的影響的,但是對於多線程併發來說的話那就有影響了

volatile關鍵字可以解決併發編程的這個問題

java內存模型:堆、棧、數字計數器、常量池

java利用的是多線程機制進行處理多個任務,每個線程之間互不影響私有化都有各自的工作內存,同時呢又共享主存,在線程與內存區域交互時,數據會從主存複製到線程的工作內存一份,進而由線程進行數據處理,處理完之後會再次複製到主存中去。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章