jdk方法定义
public static native void yield();
yield()方法的作用是 放弃当前的CPU资源,将它让给其它任务。但放弃的时间不确定。
|
|
jvm层实现 jvm_yield
1 JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass))
2 JVMWrapper("JVM_Yield");
3 //检查是否设置了DontYieldALot参数,默认为fasle
4 //如果设置为true,直接返回
5 if (os::dont_yield()) return;
6 //如果ConvertYieldToSleep=true(默认为false),调用os::sleep,否则调用os::yield
7 if (ConvertYieldToSleep) {
8 os::sleep(thread, MinSleepInterval, false);//sleep 1ms
9 } else {
10 os::yield();
11 }
12 JVM_END
ConvertYieldToSleep(默认false)如果true: 调用系统sleep函数 1ms 如果false:调用内核系统的os::yield()||
1 //sched_yield是linux kernel提供的API,它会使调用线程放弃CPU使用权,加入到同等优先级队列的末尾;
2 //如果调用线程是优先级最高的唯一线程,yield方法返回后,调用线程会继续运行;
3 //因此可以知道,对于和调用线程相同或更高优先级的线程来说,yield方法会给予了它们一次运行的机会;
4 void os::yield() {
5 sched_yield();
6 }