yiled 方法属于一种启发式的方法,它会提醒调度器我愿意放弃当前的 CPU 自由,如果 CPU 的资源不紧张,则会忽略这种提醒。
调用 yield 方法会使当前线程从 RUNNING 状态切换到 RUNNABLE 状态,一般这个方法不太常用。
package concurrent;
import java.util.stream.IntStream;
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。
打开注释后再运行,会发现输出结果还是不一致,有时候是打印0,有时候是打印1。
一般情况下,因为第一个线程如果先获得了 CPU 资源,它会比较谦虚,主动告诉 CPU 调度器释放原本属于自己的资源,但是 yield 只是一个提示( hint ),CPU 调度器并不会保证每次都能满足 yield 提示。
yield 对程序并不可控,所以这个方法一般不太常用。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/122910748
内容来源于网络,如有侵权,请联系作者删除!