问答详情
源自:3-2 Java线程停止正确的方法---设置退出旗标

在ArmyRunnable类中,为什么要加入Thread.yield()?我试了一下不加这句话,也可以满足要求,加与不加这句话的区别在哪?

在ArmyRunnable类中,为什么要加入Thread.yield()?我试了一下不加这句话,也可以满足要求,加与不加这句话的区别在哪?

提问者:_菲菲菲菲 2016-11-14 17:02

个回答

  • FDU_XN
    2016-11-28 20:10:45

    如果不加yield 的话,那么需要当前线程执行完之后 才会开始下一线程, 加上之后 每次执行 都会重新分配线程资源, 多试几次应该就可以看出效果来了。

  • _菲菲菲菲
    2016-11-15 14:52:32

    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()+"结束了战斗!");
    	}
    }

    就是这段代码

  • jackdoog
    2016-11-15 13:59:02

    当 不使用 yield()方法时  优先权还在本线程 上 。使用yield方法后,优先权重新分配 也有可能再次回到本线程。 所以导致 有可能 用与不用 调试出的结果相同 ,所以 多试几次 没用yield方法的 必定每次结果相同 而调用yield方法的会有许多不同结果i