yield方法

jdk方法定义linux

public static native void yield();app

yield()方法的做用是 放弃当前的CPU资源,将它让给其它任务。但放弃的时间不肯定。jvm

|函数

|spa

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 }
相关文章
相关标签/搜索