這個(gè)程序的目的是用雙線程跑數(shù)據(jù),得出結(jié)果輸出。(只想輸出1個(gè)值)當(dāng)i等于10000時(shí),單線程結(jié)果是13580.357929997872雙線程結(jié)果是:(怎么輸出了兩個(gè)值,還跟單線程的結(jié)果不一樣)當(dāng)i等于100000000時(shí),單線程結(jié)果是1.3579357998825678E8雙線程結(jié)果是:(怎么輸出了兩個(gè)值,還跟單線程的結(jié)果不一樣,而且這兩個(gè)值還是兩個(gè)不同的值)這結(jié)果太奇怪了。。。付源碼package j120;public class j1200 implements Runnable {?? ?double a=1;?? ?long i;?? ??? ?public void run() {?? ??? ??? ?while(i<100000000) {?? ??? ??? ??? ?a+=1.357935793;?? ??? ??? ??? ?i++;?? ??? ??? ?}?? ??? ?System.out.println(a);?? ?}}package j120;public class j1201 {?? ?public static void main(String[] args) {?? ??? ?j1200 a=new j1200();?? ??? ?new Thread(a).start(); ?? ??? ?new Thread(a).start(); ?? ?//?? ?new Thread(a).start(); ?? ?//?? ?new Thread(a).start();?? ?}}
1 回答
已采納

Developer_Zuck
TA貢獻(xiàn)112條經(jīng)驗(yàn) 獲得超42個(gè)贊
你兩次new的thread不是同一個(gè)對(duì)象,但這兩個(gè)不同對(duì)象中的handle指向了同一個(gè)對(duì)象,所以前面的改變了a值時(shí),后面取得的是對(duì)象本身內(nèi)的值,也就是改變后的值
如果你想得到兩個(gè)線程運(yùn)行的解果一樣,需要再次創(chuàng)建一個(gè)j1200對(duì)象,運(yùn)行后,結(jié)果一致。
j1200 a = new j1200();
j1200 a2 = new j1200();
new Thread(a).start();
new Thread(a2).start();
點(diǎn)擊展開后面2條
添加回答
舉報(bào)
0/150
提交
取消