yield

Thread.yield()是Java中的一个静态方法,作用是:当前线程主动让出CPU的执行权,
把执行机会交给同等优先级的其他线程(并不一定真的会让出执行权,取决于操作系统调度器实现,有可能会重新得到CPU的执行权)。
调用后,当前线程就从运行状态变为就绪状态,等待线程调度器重新调度,但是不会阻塞线程也不会释放锁资源。
下面的案例中,a、b两个线程有可能会交替执行,也有可能不会交替执行。

public class YieldTest {
    public static void main(String[] args) {
        new Thread(()->{
            String name = Thread.currentThread().getName();
            for (int i = 0; i < 10; i++) {
                System.out.println("thread name is:"+name);
                Thread.yield();
            }
        },"thread a").start();

        new Thread(()->{
            String name = Thread.currentThread().getName();
            for (int i = 0; i < 10; i++) {
                System.out.println("thread name is:"+name);
                Thread.yield();
            }
        },"thread b").start();
    }
}

特性 Thread.yield() Thread.sleep(ms)
是否主动让出 CPU ✅ 是 ❌ 否(只是暂停自己)
是否一定会让出 ❌ 不一定 ✅ 会暂停一段时间
是否释放锁 ❌ 不释放锁 ❌ 不释放锁
是否有时间限制 ❌ 没有 ✅ 有指定时长
是否会被中断 ❌ 不会 ✅ 可被中断抛出异常
posted @ 2025-07-04 09:55  Charlie-Pang  阅读(10)  评论(0)    收藏  举报