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 }