浅谈Thread.yield()方法

1,937 阅读1分钟

概念

当调用Thread.yield()方法时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示.

注意:

  • 只是示意愿意让出CPU使用权,但是不是一定会让出(取决于线程调度器)
  • 无论线程调度器是否接受这个示意,都不会改变锁的所有权(前者对象是线程,后者是对象)

代码示例

public class YieldDemo {

    public static void main(String[] args) {

        Runnable yieldTask = () -> {
            for (int i = 0; i <= 10; i++) {
                System.out.println(Thread.currentThread().getName() + " " + i);
                if (i == 5){
                    Thread.yield();
                }
            }
        };

        Thread thread1 = new Thread(yieldTask,"A");
        Thread thread2 = new Thread(yieldTask,"B");
        thread1.start();
        thread2.start();
    }
}

运行结果,结果不一,结合实际验证

A 0 B 0 A 1 A 2 A 3 A 4 A 5 B 1 A 6 B 2 B 3 B 4 B 5 A 7 A 8 A 9 A 10 B 6 B 7 B 8 B 9 B 10