本文向大家分享的主要內(nèi)容是Java面試中一個(gè)常見的知識點(diǎn):volatile關(guān)鍵字。本文詳細(xì)介紹了volatile關(guān)鍵字的方方面面,希望大家在閱讀過本文之后,能完美解決volatile關(guān)鍵字的相關(guān)問題。

在Java相關(guān)的崗位面試中,很多面試官都喜歡考察面試者對Java并發(fā)的了解程度,而以volatile關(guān)鍵字作為一個(gè)小的切入點(diǎn),往往可以一問到底,把Java內(nèi)存模型(JMM),Java并發(fā)編程的一些特性都牽扯出來,深入地話還可以考察JVM底層實(shí)現(xiàn)以及操作系統(tǒng)的相關(guān)知識。 下面我們以一次假想的面試過程,來深入了解下volitile關(guān)鍵字吧!
面試官: Java并發(fā)這塊了解的怎么樣?說說你對volatile關(guān)鍵字的理解就我理解的而言,被volatile修飾的共享變量,就具有了以下兩點(diǎn)特性:
1.保證了不同線程對該變量操作的內(nèi)存可見性;
2.禁止指令重排序
這個(gè)聊起來可就多了,我還是從Java內(nèi)存模型說起吧。 Java虛擬機(jī)規(guī)范試圖定義一種Java內(nèi)存模型(JMM),來屏蔽掉各種硬件和操作系統(tǒng)的內(nèi)存訪問差異,讓Java程序在各種平臺上都能達(dá)到一致的內(nèi)存訪問效果。簡單來說,由于CPU執(zhí)行指令的速度是很快的,但是內(nèi)存訪問的速度就慢了很多,相差的不是一個(gè)數(shù)量級,所以搞處理器的那群大佬們又在CPU里加了好幾層高速緩存。 在Java內(nèi)存模型里,對上述的優(yōu)化又進(jìn)行了一波抽象。JMM規(guī)定所有變量都是存在主存中的,類似于上面提到的普通內(nèi)存,每個(gè)線程又包含自己的工作內(nèi)存,方便理解就可以看成CPU上的寄存器或者高速緩存。所以線程的操作都是以工作內(nèi)存為主,它們只能訪問自己的工作內(nèi)存,且工作前后都要把值在同步回主內(nèi)存。 這么說得我自己都有些不清楚了,拿張紙畫一下:
在線程執(zhí)行時(shí),首先會從主存中read變量值,再load到工作內(nèi)存中的副本中,然后再傳給處理器執(zhí)行,執(zhí)行完畢后再給工作內(nèi)存中的副本賦值,隨后工作內(nèi)存再把值傳回給主存,主存中的值才更新。 使用工作內(nèi)存和主存,雖然加快的速度,但是也帶來了一些問題。比如看下面一個(gè)例子:
i = i + 1;
分享題目:詳解Java面試官最愛問的volatile關(guān)鍵字-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://www.chinadenli.net/article22/psocc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)、微信公眾號、軟件開發(fā)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容