java多线程中yield方法的含义

版权声明:未经允许禁止转载 https://blog.csdn.net/weixin_38481963/article/details/87736939

Thread.yield()方法:

使当前线程从运行状态转为就绪状态。CPU会再次从就绪状态中的线程选择执行,刚刚的线程可能再次被选中执行。

yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。

测试代码:

class Task implements Runnable {
    public void run(){
        System.out.println("Thread:"+Thread.currentThread().getName());
        Thread.yield();
        System.out.println("Back to Thread:"+Thread.currentThread().getName());
    }
}

public class MyThread {
    public static void main (String []args) {
        for(int i=0; i<5; i++)
        {
            new Thread(new Task()).start();
        }
    }
}

运行结果:

Thread:Thread-4
Thread:Thread-0
Thread:Thread-3
Thread:Thread-2
Thread:Thread-1
Back to Thread:Thread-4
Back to Thread:Thread-0
Back to Thread:Thread-1
Back to Thread:Thread-2
Back to Thread:Thread-3

从结果可以看出,当输出第一个语句后,线程就让出了,转到其他线程执行。

从源代码来看,yield方法是本地方法

public static native void yield();

猜你喜欢

转载自blog.csdn.net/weixin_38481963/article/details/87736939