yield方法
操作系統是爲每個線程分配一個時間片來佔用CPU執行的,正常情況下只有佔用CPU的線程使用完時間片後,線程調度器纔會進行下一輪線程調度。如果線程在沒有使用完時間片的情況下調用了Thread的yield方法,這個線程就會處於就緒狀態,讓出CPU的執行權。線程調度器就會重新從就緒隊列裏取一個優先級最高的線程執行。也有可能會取到剛剛讓出CPU的線程。
代碼理解
public class YieldTest implements Runnable {
YieldTest() {
Thread t = new Thread(this);
t.start();
}
public void run() {
for (int i =0 ;i<3;i++){
System.out.println(Thread.currentThread() + "YieldTest start . . ." + i);
if (i == 0) {
System.out.println(Thread.currentThread() + "YieldTest yield cpu");
Thread.yield();
}
}
System.out.println(Thread.currentThread() + "YieldTest is over");
}
public static void main(String[] args) {
new YieldTest();
new YieldTest();
}
}
這裏啓動了兩個線程,在i=0的時候調用yield方法,從結果中可以看出,線程調用該方法後沒有繼續執行下去讓出了執行權,因爲只有兩個線程所以馬上又被調用了。
還有一點,線程讓出執行權後,再次被調用,是不會重新開始執行的,而是緊接着之前的位置開始執行。