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 }