礼让线程:让当前正执行线程从运行状态转入就绪状态,然后让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{
@Override
public 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也进入死亡状态。

从上面的三个结果中可以得出,不一定每次都会礼让成功,而让线程从运行状态进入就绪状态,然后在公平竞争。
本文详细解析Java中线程礼让(yield)的概念,通过实例演示如何使用Thread.yield()方法使线程从运行状态转为就绪状态,以便CPU重新调度,提高线程间的公平竞争。
1062

被折叠的 条评论
为什么被折叠?



