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 }
相關文章
相關標籤/搜索