小凡156

博客园 首页 新随笔 联系 订阅 管理

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 }

 



posted on 2019-10-29 22:06  小凡156  阅读(1049)  评论(0编辑  收藏  举报