13 回答

TA貢獻(xiàn)3條經(jīng)驗(yàn) 獲得超11個(gè)贊
其實(shí)答案是不定的,看哪個(gè)線程先搶到cpu時(shí)間。不能用代碼的先后順序決定線程的執(zhí)行順序。而且線程有沒(méi)有加鎖等等都會(huì)影響。
//?就這個(gè)例子來(lái)說(shuō)大多數(shù)情況都變。 public?static?void?main(String[]?args)?{ ????final?test1?t?=?new?test1(); new?Thread()?{ public?void?run()?{ t.foo(); } }.start(); new?Thread()?{ public?void?run()?{ System.out.println(t.getA()?+?"--"?+?t.getB()); } }.start(); } //?但是實(shí)際項(xiàng)目中如果foo()執(zhí)行的時(shí)間長(zhǎng),可能foo還沒(méi)執(zhí)行完,cpu就會(huì)把時(shí)間片切換到第二個(gè)線程執(zhí)行。 //?所以每次的結(jié)果可能都不一樣。 //?例如把foo()改成這樣,讓它的執(zhí)行時(shí)間變長(zhǎng),可能就都不變。把循環(huán)次數(shù)改小,執(zhí)行時(shí)間變短,可能都變 public?void?foo(){ ????long?i?=?0; ????while(i<1000000000)?{ int?c?=?a?+?b; i++; ????} ????a=3; ????b=4; }

TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超2個(gè)贊
abcd都可能,看那個(gè)線程搶到CPU,另一個(gè)線程執(zhí)行到什么地方,搶CUP是不固定的,所以所有的答案理論上運(yùn)行無(wú)限次時(shí)候是都有可能發(fā)生的。

TA貢獻(xiàn)39條經(jīng)驗(yàn) 獲得超47個(gè)贊
建議提問(wèn)者把輸出調(diào)用方法的代碼也貼出來(lái),我通過(guò)new test1 的方法創(chuàng)建一個(gè)實(shí)例,然后調(diào)用方法,輸出的答案是B
Java中沒(méi)有全局變量的概念,需要分清是對(duì)變量的引用改值還是對(duì)變量本身改值

TA貢獻(xiàn)13條經(jīng)驗(yàn) 獲得超4個(gè)贊
選A吧。不過(guò)不知道你的截圖是不是整個(gè)題目的。雖然你定義了foo函數(shù)。在里面重新定義了A,B的值。但是你并沒(méi)有對(duì)foo這個(gè)函數(shù)有過(guò)操作。所以,a、b的值都是原來(lái)初始化的時(shí)候的值、
添加回答
舉報(bào)