這篇文章主要介紹“Java中happens-befor的規(guī)則和用法”,在日常操作中,相信很多人在Java中happens-befor的規(guī)則和用法問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java中happens-befor的規(guī)則和用法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
陽(yáng)城網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
一、happens-before規(guī)則
我們編寫(xiě)的程序都要經(jīng)過(guò)優(yōu)化后(編譯器和處理器會(huì)對(duì)我們的程序進(jìn)行優(yōu)化以提高運(yùn)行效率)才會(huì)被運(yùn)行,優(yōu)化分為很多種,其中有一種優(yōu)化叫做重排序,重排序需要遵守happens-before規(guī)則,不能說(shuō)你想怎么排就怎么排,如果那樣豈不是亂了套。
happens-before部分規(guī)則如下:
1、程序順序規(guī)則:一個(gè)線程中的每個(gè)操作happens-before于該線程中的任意后續(xù)操作
2、監(jiān)視器鎖(同步)規(guī)則:對(duì)于一個(gè)監(jiān)視器的解鎖,happens-before于隨后對(duì)這個(gè)監(jiān)視器的加鎖
注1:為什么是部分happens-before原則,因?yàn)檫@篇文章是讓你理解happens-before原則,我會(huì)盡量讓你專(zhuān)注在這件事情上不被其他的所影響
注2:程序順序規(guī)則中所說(shuō)的每個(gè)操作happens-before于該線程中的任意后續(xù)操作并不是說(shuō)前一個(gè)操作必須要在后一個(gè)操作之前執(zhí)行,而是指前一個(gè)操作的執(zhí)行結(jié)果必須對(duì)后一個(gè)操作可見(jiàn),如果不滿足這個(gè)要求那就不允許這兩個(gè)操作進(jìn)行重排序
二、例:下面的方法的功能是計(jì)算一個(gè)長(zhǎng)方形面積
public double rectangleArea(double length , double width){ double leng; double wid; leng=length;//A wid=width;//B double area=leng*wid;//C return area; }
上面的操作在運(yùn)行之前編譯器和處理器可能會(huì)進(jìn)行優(yōu)化
在程序中
A happens-before B
B happens-before C
A happens-before C //happens-before具有傳遞規(guī)則
根據(jù)happens-before規(guī)則我們來(lái)分析重排序后可能產(chǎn)生的結(jié)果
因?yàn)锳 happens-before B,所以A操作產(chǎn)生的結(jié)果leng一定要對(duì)B操作可見(jiàn),但是現(xiàn)在B操作并沒(méi)有用到length,所以這兩個(gè)操作可以重排序,那A操作是否可以和C操作重排序呢,如果A操作和C操作進(jìn)行了重排序,因?yàn)閘eng沒(méi)有被賦值,所以leng=0,area=0*wid也就是area=0;這個(gè)結(jié)果顯然是錯(cuò)誤的,所以A操作是不能和C操作進(jìn)行重排序的(這就是注2中說(shuō)的前一個(gè)操作的執(zhí)行結(jié)果必須對(duì)后羿操作可見(jiàn),如果不滿足這個(gè)要求就不允許這兩個(gè)操作進(jìn)行重排序)
到此,關(guān)于“Java中happens-befor的規(guī)則和用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!