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 }