課程
/后端開發(fā)
/Java
/深入淺出Java多線程
在ArmyRunnable類中,為什么要加入Thread.yield()?我試了一下不加這句話,也可以滿足要求,加與不加這句話的區(qū)別在哪?
2016-11-14
源自:深入淺出Java多線程 3-2
正在回答
如果不加yield 的話,那么需要當前線程執(zhí)行完之后 才會開始下一線程, 加上之后 每次執(zhí)行 都會重新分配線程資源, 多試幾次應該就可以看出效果來了。
package?Thread; public?class?ArmyRunnable?implements?Runnable?{ volatile?boolean?keepRunning=true; public?void?run()?{ while?(keepRunning)?{ for?(int?i=1;i<=5;i++)?{ System.out.println(Thread.currentThread().getName()+"第["+i+"]次進攻對方"); //Thread.yield(); } } System.out.println(Thread.currentThread().getName()+"結(jié)束了戰(zhàn)斗!"); } }
就是這段代碼
當 不使用 yield()方法時 ?優(yōu)先權還在本線程 上 。使用yield方法后,優(yōu)先權重新分配 也有可能再次回到本線程。 所以導致 有可能 用與不用 調(diào)試出的結(jié)果相同 ,所以 多試幾次 沒用yield方法的 必定每次結(jié)果相同 而調(diào)用yield方法的會有許多不同結(jié)果i
_菲菲菲菲 提問者
舉報
帶你一起深入淺出多線程,掌握基礎,展望進階路線
1 回答加入Thread.yield()這段代碼的意義何在?
1 回答不加Thread.yield() 下一次的線程主動權不也是不一定的嗎
2 回答在wait set中不滿足條件的線程,被喚醒后是不是還是不滿足條件?
3 回答為什么我必須在第二個類前面加個靜態(tài) static 才可以運行? 代碼完全一樣的情況下
2 回答為什么那個加鎖會加大開銷
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關注慕課網(wǎng)微信公眾號
2016-11-28
如果不加yield 的話,那么需要當前線程執(zhí)行完之后 才會開始下一線程, 加上之后 每次執(zhí)行 都會重新分配線程資源, 多試幾次應該就可以看出效果來了。
2016-11-15
就是這段代碼
2016-11-15
當 不使用 yield()方法時 ?優(yōu)先權還在本線程 上 。使用yield方法后,優(yōu)先權重新分配 也有可能再次回到本線程。 所以導致 有可能 用與不用 調(diào)試出的結(jié)果相同 ,所以 多試幾次 沒用yield方法的 必定每次結(jié)果相同 而調(diào)用yield方法的會有許多不同結(jié)果i