概念
当调用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
网友评论