JAVA Thread.yield()

概述

使当前线程从 运行状态 变为 就绪状态,让出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线程 和 普通线程,由操作系统选择执行谁


原文出处:/show_1EF4sunKmQmf.html