在ArmyRunnable类中,为什么要加入Thread.yield()?我试了一下不加这句话,也可以满足要求,加与不加这句话的区别在哪?
如果不加yield 的话,那么需要当前线程执行完之后 才会开始下一线程, 加上之后 每次执行 都会重新分配线程资源, 多试几次应该就可以看出效果来了。
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()+"结束了战斗!"); } }
就是这段代码
当 不使用 yield()方法时 优先权还在本线程 上 。使用yield方法后,优先权重新分配 也有可能再次回到本线程。 所以导致 有可能 用与不用 调试出的结果相同 ,所以 多试几次 没用yield方法的 必定每次结果相同 而调用yield方法的会有许多不同结果i