Thread中Yeild用

package thread;

public class YieldTest {
        public static void main(String[] args) {
            Thread threada = new ThreadA();
            Thread threadb = new ThreadB();
            // 設置優先級:MIN_PRIORITY最低優先級1;NORM_PRIORITY普通優先級5;MAX_PRIORITY最高優先級10
            threada.setPriority(Thread.MIN_PRIORITY);
            threadb.setPriority(Thread.MAX_PRIORITY);

            threada.start();
            threadb.start();
        }
    }
    class ThreadA extends Thread {
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("ThreadA--" + i);
                Thread.yield();
            }
        }
    }
    class ThreadB extends Thread {
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("ThreadB--" + i);
                Thread.yield();
            }
        }
    }

本以爲運行結果如下:

ThreadB--0
ThreadA--0
ThreadB--1
ThreadA--1
ThreadB--2
ThreadA--2
ThreadB--3
ThreadA--3
ThreadB--4
ThreadA--4
ThreadB--5
ThreadA--5
ThreadB--6
ThreadA--6
ThreadB--7
ThreadA--7
ThreadB--8
ThreadA--8
ThreadB--9
ThreadA--9

結果卻出現了多種情況,如下:

ThreadB--0
ThreadB--1
ThreadB--2
ThreadB--3
ThreadB--4
ThreadB--5
ThreadB--6
ThreadB--7
ThreadB--8
ThreadB--9
ThreadA--0
ThreadA--1
ThreadA--2
ThreadA--3
ThreadA--4
ThreadA--5
ThreadA--6
ThreadA--7
ThreadA--8
ThreadA--9


或者

ThreadB--0
ThreadA--0
ThreadB--1
ThreadA--1
ThreadA--2
ThreadA--3
ThreadA--4
ThreadA--5
ThreadA--6
ThreadA--7
ThreadA--8
ThreadA--9
ThreadB--2
ThreadB--3
ThreadB--4
ThreadB--5
ThreadB--6
ThreadB--7
ThreadB--8
ThreadB--9

    Java線程中的Thread.yield( )方法,譯爲線程讓步。顧名思義,就是說當一個線程使用了這個方法之後,它就會把自己CPU執行的時間讓掉,

讓自己或者其它的線程運行,注意是讓自己或者其他線程運行,並不是單純的讓給其他線程。

        yield()的作用是讓步。它能讓當前線程由“運行狀態”進入到“就緒狀態”,從而讓其它具有相同優先級的等待線程獲取執行權;但是,並不能保

證在當前線程調用yield()之後,其它具有相同優先級的線程就一定能獲得執行權;也有可能是當前線程又進入到“運行狀態”繼續運行!

      舉個例子:一幫朋友在排隊上公交車,輪到Yield的時候,他突然說:我不想先上去了,咱們大家來競賽上公交車。然後所有人就一塊衝向公交車,

有可能是其他人先上車了,也有可能是Yield先上車了。

     但是線程是有優先級的,優先級越高的人,就一定能第一個上車嗎?這是不一定的,優先級高的人僅僅只是第一個上車的概率大了一點而已,

最終第一個上車的,也有可能是優先級最低的人。並且所謂的優先級執行,是在大量執行次數中才能體現出來的。


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