兩個(gè)線程交替的疑問
Java中某條線程是否只有當(dāng)顯式調(diào)用了sleep()方法時(shí),才會(huì)休眠并讓出處理器資源?我的運(yùn)行結(jié)果中兩個(gè)線程的確是交替運(yùn)行,但不是運(yùn)行完整10次就進(jìn)行交替。也就是說某一線程的sleep()方法還未被調(diào)用時(shí),另一線程就競(jìng)爭(zhēng)到了cpu資源。這個(gè)結(jié)果是否正確呢?多謝回答~
Java中某條線程是否只有當(dāng)顯式調(diào)用了sleep()方法時(shí),才會(huì)休眠并讓出處理器資源?我的運(yùn)行結(jié)果中兩個(gè)線程的確是交替運(yùn)行,但不是運(yùn)行完整10次就進(jìn)行交替。也就是說某一線程的sleep()方法還未被調(diào)用時(shí),另一線程就競(jìng)爭(zhēng)到了cpu資源。這個(gè)結(jié)果是否正確呢?多謝回答~
2015-02-21
舉報(bào)
2015-02-25
你得結(jié)果也是正常的。簡(jiǎn)單說只有Running的線程擁有CPU,CPU時(shí)間片用完就釋放。這就是為什么還沒調(diào)用sleep(),另一個(gè)線程就執(zhí)行了。要把整個(gè)問題說清楚需要了解Java線程的狀態(tài)及遷移的知識(shí)。你可以參考慕課上的《細(xì)說Java多線程》
2016-12-05
我也在想這個(gè)問題
2015-02-26
這個(gè)和操作系統(tǒng)有關(guān),Linux按照時(shí)間分片,Windows要等線程主動(dòng)釋放;在Java中,調(diào)用靜態(tài)方法會(huì)造成主動(dòng)釋放。
你可以這樣測(cè)試:A和B兩個(gè)線程,里面變量從0加到N(隨意),循環(huán)結(jié)束之后再調(diào)用System.out.println();Windows上應(yīng)該是先start()的那個(gè)線程首先輸出,有一點(diǎn)需要注意的是,除了最后的輸出以外,不要有任何的靜態(tài)方法調(diào)用!