概述
使当前线程从 运行状态 变为 就绪状态,让出CPU。
操作系统会再次从 就绪状态 的线程中 选择执行,也就是说,刚刚执行 Thread.yield() 方法的线程,有可能会被再次执行到(并不是一定会执行)
类比
已经是总统的拜登(正在运行的线程),在换届选举时(该线程执行了 yield() 方法),可能再次选上(可能再次被cpu调用),也可能是川普选上(可能cpu调用另一个线程)
方法
public static native void yield();
例子
定义普通线程
public class MyThread extends Thread{
public MyThread() {
super("普通线程");
}
@Override
public void run() {
for (int i = 0; i <200 ; i++) {
System.out.println(this.getName()+"-"+i);
}
}
}
定义yield线程
public class YieldThread extends Thread{
public YieldThread() {
super("yield线程");
}
@Override
public void run() {
for (int i = 0; i <100 ; i++) {
if(i%5 == 0){
System.out.println(this.getName()+" 执行yield()");
Thread.yield();
}
System.out.println(this.getName()+"-"+i);
}
}
}
定义测试类
public class ThreadTestMain5 {
public static void main(String[] args) {
YieldThread yt = new YieldThread();
MyThread mt = new MyThread();
yt.start();
mt.start();
}
}
执行结果:
........
yield线程-7
普通线程-8
yield线程-8
普通线程-9
yield线程-9
普通线程-10
普通线程-11
普通线程-12
普通线程-13
普通线程-14
..........
当yield线程执行第 5、10、15 次时,执行 yield() 方法,让出CPU,处于 就绪状态。yield线程 和 普通线程,由操作系统选择执行谁
