日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
跟我學(xué)編程:Java虛擬機(jī)之指令重排序

什么是指令重排序?

在水城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,外貿(mào)網(wǎng)站建設(shè),水城網(wǎng)站建設(shè)費(fèi)用合理。

在實(shí)際運(yùn)行時(shí),代碼指令可能并不是嚴(yán)格按照代碼語句順序執(zhí)行的。大多數(shù)現(xiàn)代微處理器都會 采用將指令亂序執(zhí)行(out-of-order execution,簡稱OoOE或OOE)的方法,在條件允許的 情況下,直接運(yùn)行當(dāng)前有能力立即執(zhí)行的后續(xù)指令,避開獲取下一條指令所需數(shù)據(jù)時(shí)造成的等 待。

通過亂序執(zhí)行的技術(shù),處理器可以大大提高執(zhí)行效率,而這就是指令重排。

指令重排序不是必然發(fā)生的,指令重排序會導(dǎo)致線程安全問題。

指令重排序也被稱為處理器的亂序執(zhí)行,在這種情況下盡管指令的執(zhí)行順序可能沒有完全按照程序順序執(zhí)行,但是由于指令的執(zhí)行結(jié)果的提交(反應(yīng)到寄存器和內(nèi)存中),仍然是按照程序順序來的,因此處理器的指令重排序并不會對單線程的正確性產(chǎn)生影響。

指令重排序不會對單線程程序的正確性產(chǎn)生影響,

但他可能導(dǎo)致多線程程序出現(xiàn)非預(yù)期結(jié)果。

測試邏輯
首先默認(rèn)為x = 0; y = 0; a = 0; b = 0;然后開啟兩個(gè)線程;
線程1執(zhí)行:a = 888; x = b;
線程2執(zhí)行:b = 888; y = a;
有且只有x = b,y = a兩個(gè)同時(shí)先執(zhí)行,才會出現(xiàn)x=y=0。

所以測試是否存在x=y=0觀察指令是否會出現(xiàn)重排現(xiàn)象。
public class OrderTest {
private static int x = 0, y = 0;
private static int a = 0, b = 0;

public static void main(String[] args) throws InterruptedException{
for(long i = 0; i < Long.MAX_VALUE; i++){
x = 0; y = 0; a = 0; b = 0;

CountDownLatch countDownLatch = new CountDownLatch(2);



Thread one = new Thread(new Runnable() {
@Override
public void run() {
a = 888;
x = b;

countDownLatch.countDown();
}
});



Thread two = new Thread(new Runnable() {
@Override
public void run() {

b = 888;
y = a;

countDownLatch.countDown();
}
});

one.start();
two.start();


//等待計(jì)數(shù)器變?yōu)?,即等待所有異步線程執(zhí)行完畢
countDownLatch.await();
if(x == 0 && y == 0){
//x=y=0 只能是x = b;y = a;這兩個(gè)先執(zhí)行
System.out.println("執(zhí)行次數(shù)"+i+"發(fā)現(xiàn)x=y=0");
break;
}

}
}

}

結(jié)果:發(fā)現(xiàn)了指令重排現(xiàn)象


當(dāng)前題目:跟我學(xué)編程:Java虛擬機(jī)之指令重排序
當(dāng)前路徑:http://m.5511xx.com/article/dpsposo.html