線程的基本操作(六)---yield

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方法,從結果中可以看出,線程調用該方法後沒有繼續執行下去讓出了執行權,因爲只有兩個線程所以馬上又被調用了。
還有一點,線程讓出執行權後,再次被調用,是不會重新開始執行的,而是緊接着之前的位置開始執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章