本文主要是介绍多线程_10_礼让yield,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
礼让线程:让当前正执行线程从运行状态转入就绪状态,然后让cpu重新调度,而不是进入阻塞状态。这样可以避免当前线程占用cpu过久,这个yield和sllep一样的是,都是静态方法。
案例
package com.cb.thread.day02;
/** yield 礼让线程,暂停线程,然后直接进入就绪状态不是阻塞状态*/public class YieldDemo01 {public static void main(String[] args) {MyYield my = new MyYield();new Thread(my,"a").start();new Thread(my,"b").start();}
}
class MyYield implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"-->start");Thread.yield();//礼让System.out.println(Thread.currentThread().getName()+"-->end");}
}
运行结果1:当cpu调度线程a进入运行状态执行run方法先打印a->start,礼让进入就绪状态等待cpu 调度,然后cpu调度线程b进入运行状态执行run方法打印b–>start,礼让进入就绪状态等待cpu 调度,然后cpu调度线程a接着打印a–>end
,接着a进入死亡状态,然后cpu调度线程b接着打印b–>end,b也进入死亡状态。
运行结果2:当cpu调度线程a进入运行状态执行run方法先打印a->start,礼让进入就绪状态等待cpu 调度,然后cpu调度线程b进入运行状态执行run方法打印b–>start,礼让进入就绪状态等待cpu 调度,然后cpu还是调度线程b接着打印b–>end,接着b进入死亡状态,然后cpu调度线程b接着打印a–>end,a也进入死亡状态。
运行结果3:当cpu调度线程a进入运行状态执行run方法先打印a->start,礼让进入就绪状态等待cpu 调度,然后cpu还是调度线程a接着打印a–>end,接着a进入死亡状态,然后cpu还是调度线程b接着打印b–>start,然后没有线程了,cpu调度线程b接着打印b–>end,b也进入死亡状态。
从上面的三个结果中可以得出,不一定每次都会礼让成功,而让线程从运行状态进入就绪状态,然后在公平竞争。
这篇关于多线程_10_礼让yield的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!