[Q&A] Thread.yield()
作用
Thread.yield()
让出 CPU,不会释放锁,使当前线程从RUNNING
状态切换到RUNNABLE
状态,一般这个方法不太常用 。
[Q&A] Thread.yield()
百分百让出CPU吗?
yield方法属于一种启发式的方法,仅仅作为一个提示
(hint
),其会提醒调度器我愿意放弃当前的CPU资源
,如果CPU的资源不紧张,则会忽略这种提醒。CPU调度器并不会担保每次都能满足yield提示。
public class ThreadYield {
public static void main(String[] args) {
IntStream.range(0, 2).mapToObj(ThreadYield::create).forEach(Thread::start);
}
private static Thread create(int index) {
return new Thread(() -> {
//if (index == 0) {
// Thread.yield();
//}
System.out.println(index);
});
}
}
0
1
-----------------------------------------------------------------------------读书笔记摘自书名:Java高并发编程详解:多线程与架构设计 作者:汪文君
还看到了一种描述如下,仅供参考:
调用yield
方法会使当前线程让出CPU执行时间片
,与其他线程一起重新竞争CPU时间片
。在一般情况下,优先级高的线程更有可能竞争到CPU时间片,但这不是绝对的,有的操作系统对线程的优先级并不敏感。