javavolatile是什么

本篇內容主要講解“java volatile是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java volatile是什么”吧!

創(chuàng)新互聯(lián)專注于平魯網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供平魯營銷型網站建設,平魯網站制作、平魯網頁設計、平魯網站官網定制、微信小程序開發(fā)服務,打造平魯網絡公司原創(chuàng)品牌,更為您提供平魯網站排名全網營銷落地服務。

內存模型基本概念

計算機在執(zhí)行程序時,每條指令都是在CPU中執(zhí)行的,而執(zhí)行指令過程中,勢必涉及到數(shù)據的讀取和寫入。由于程序運行過程中的臨時數(shù)據是存放在主存(物理內存)當中的,這時就存在一個問題,由于CPU執(zhí)行速度很快,而從內存讀取數(shù)據和向內存寫入數(shù)據的過程跟CPU執(zhí)行指令的速度比起來要慢的多,因此如果任何時候對數(shù)據的操作都要通過和內存的交互來進行,會大大降低指令執(zhí)行的速度。因此在CPU里面就有了高速緩存。

并發(fā)編程中的三個概念

1?原子性

即一個操作或者多個操作,要么全部執(zhí)行并且執(zhí)行的過程不會被任何因素打斷,要么就都不執(zhí)行。

2?可見性

指當多個線程訪問同一個變量時,一個線程修改了這個變量的值,其他線程能夠立即看得到修改的值。

3?有序性

即程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。一般來說,處理器為了提高程序運行效率,可能會對輸入代碼進行優(yōu)化,它不保證程序中各個語句的執(zhí)行先后順序同代碼中的順序一致,但是它會保證程序最終執(zhí)行結果和代碼順序執(zhí)行的結果是一致的。

Java內存模型

在Java虛擬機規(guī)范中試圖定義一種Java內存模型(Java Memory Model,JMM)來屏蔽各個硬件平臺和操作系統(tǒng)的內存訪問差異,以實現(xiàn)讓Java程序在各種平臺下都能達到一致的內存訪問效果。那么Java內存模型規(guī)定了哪些東西呢,它定義了程序中變量的訪問規(guī)則,往大一點說是定義了程序執(zhí)行的次序。注意,為了獲得較好的執(zhí)行性能,Java內存模型并沒有限制執(zhí)行引擎使用處理器的寄存器或者高速緩存來提升指令執(zhí)行速度,也沒有限制編譯器對指令進行重排序。也就是說,在java內存模型中,也會存在緩存一致性問題和指令重排序的問題。

注意,圖中的工作內存實際上就對應于硬件層面上的cpu cache。

volatile關鍵字

它保證了可見性和有序性,但是它不保證原子性。

下面這段話摘自《深入理解Java虛擬機》:

“觀察加入volatile關鍵字和沒有加入volatile關鍵字時所生成的匯編代碼發(fā)現(xiàn),加入volatile關鍵字時,會多出一個lock前綴指令”

lock前綴指令實際上相當于一個內存屏障(也成內存柵欄),內存屏障會提供3個功能:

1.它確保指令重排序時不會把其后面的指令排到內存屏障之前的位置,也不會把前面的指令排到內存屏障的后面;即在執(zhí)行到內存屏障這句指令時,在它前面的操作已經全部完成;

2.它會強制將對緩存的修改操作立即寫入主存;

3.如果是寫操作,它會導致其他CPU中對應的緩存行無效。

到此,相信大家對“java volatile是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

新聞標題:javavolatile是什么
當前地址:http://bm7419.com/article48/jddehp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站設計、電子商務App開發(fā)、網站制作云服務器、品牌網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網站建設