最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單易懂講解happens-before原則

 更新時(shí)間:2019年05月21日 10:06:15   作者:甜菜波波  
Java內(nèi)存模型中的happens-before是什么?為什么會(huì)有這東西的存在?一個(gè)新東西肯定是上手先,但是等我們空下來回過頭來,我們還是需要去理解這些知識(shí),只有這樣我才能深刻的記住,并且運(yùn)用熟練。下來和小編來一起學(xué)習(xí)下

在接下來的敘述里我首先會(huì)說明happens-before規(guī)則是干什么用的,然后用一個(gè)簡單的小程序說明happens-before規(guī)則

一、happens-before規(guī)則

我們編寫的程序都要經(jīng)過優(yōu)化后(編譯器和處理器會(huì)對(duì)我們的程序進(jìn)行優(yōu)化以提高運(yùn)行效率)才會(huì)被運(yùn)行,優(yōu)化分為很多種,其中有一種優(yōu)化叫做重排序,重排序需要遵守happens-before規(guī)則,不能說你想怎么排就怎么排,如果那樣豈不是亂了套。

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ì)盡量讓你專注在這件事情上不被其他的所影響

注2:程序順序規(guī)則中所說的每個(gè)操作happens-before于該線程中的任意后續(xù)操作并不是說前一個(gè)操作必須要在后一個(gè)操作之前執(zhí)行,而是指前一個(gè)操作的執(zhí)行結(jié)果必須對(duì)后一個(gè)操作可見,如果不滿足這個(gè)要求那就不允許這兩個(gè)操作進(jìn)行重排序

二、例:下面的方法的功能是計(jì)算一個(gè)長方形面積

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ī)則我們來分析重排序后可能產(chǎn)生的結(jié)果

因?yàn)锳  happens-before  B,所以A操作產(chǎn)生的結(jié)果leng一定要對(duì)B操作可見,但是現(xiàn)在B操作并沒有用到length,所以這兩個(gè)操作可以重排序,那A操作是否可以和C操作重排序呢,如果A操作和C操作進(jìn)行了重排序,因?yàn)閘eng沒有被賦值,所以leng=0,area=0*wid也就是area=0;這個(gè)結(jié)果顯然是錯(cuò)誤的,所以A操作是不能和C操作進(jìn)行重排序的(這就是注2中說的前一個(gè)操作的執(zhí)行結(jié)果必須對(duì)后羿操作可見,如果不滿足這個(gè)要求就不允許這兩個(gè)操作進(jìn)行重排序)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

大关县| 阜康市| 沈阳市| 柳州市| 东乌珠穆沁旗| 讷河市| 宁化县| 将乐县| 汤阴县| 通江县| 信阳市| 青浦区| 邮箱| 红原县| 汾西县| 岳阳县| 博湖县| 大冶市| 汽车| 镇坪县| 堆龙德庆县| 通道| 竹山县| 周至县| 怀宁县| 泰顺县| 凤凰县| 铜梁县| 同心县| 潜山县| 昆明市| 页游| 武平县| 盐亭县| 察隅县| 叶城县| 富蕴县| 乌兰察布市| 乌拉特后旗| 达州市| 邯郸县|