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