概念
当调用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