全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)常見(jiàn)問(wèn)題正文

Thread類(lèi)中的yield方法有什么作用?

更新時(shí)間:2023-04-19 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在Java中,Thread類(lèi)中的yield()方法用于將 CPU 資源讓給其他線(xiàn)程。當(dāng)一個(gè)線(xiàn)程調(diào)用yield()方法時(shí),它會(huì)暫停當(dāng)前正在執(zhí)行的任務(wù)并讓出CPU資源,以便其他線(xiàn)程有機(jī)會(huì)執(zhí)行。如果沒(méi)有其他線(xiàn)程需要執(zhí)行,那么該線(xiàn)程將繼續(xù)執(zhí)行。

  下面是一個(gè)簡(jiǎn)單的Java代碼演示yield()方法的用法:

public class YieldDemo extends Thread {
    public YieldDemo(String name) {
        super(name);
    }

    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(Thread.currentThread().getName()
                + " running: " + i);
            // 調(diào)用 yield() 方法
            Thread.yield();
        }
    }

    public static void main(String[] args) {
        YieldDemo t1 = new YieldDemo("Thread 1");
        YieldDemo t2 = new YieldDemo("Thread 2");

        // 啟動(dòng)線(xiàn)程
        t1.start();
        t2.start();
    }
}

  在這個(gè)例子中,我們創(chuàng)建了兩個(gè) YieldDemo 線(xiàn)程對(duì)象并啟動(dòng)它們。每個(gè)線(xiàn)程都會(huì)運(yùn)行一個(gè)循環(huán),打印出線(xiàn)程名稱(chēng)和循環(huán)計(jì)數(shù)器的值。在每次循環(huán)迭代中,線(xiàn)程都會(huì)調(diào)用 yield() 方法,以便讓其他線(xiàn)程有機(jī)會(huì)運(yùn)行。

  運(yùn)行這個(gè)程序,輸出可能是這樣的:

Thread 1 running: 1
Thread 2 running: 1
Thread 1 running: 2
Thread 2 running: 2
Thread 1 running: 3
Thread 2 running: 3
Thread 1 running: 4
Thread 2 running: 4
Thread 1 running: 5
Thread 2 running: 5

  注意到,在輸出中,兩個(gè)線(xiàn)程交替運(yùn)行,每個(gè)線(xiàn)程都執(zhí)行了五次循環(huán),但它們的運(yùn)行順序并不是固定的。這是因?yàn)槲覀冊(cè)诿看窝h(huán)迭代中調(diào)用了yield() 方法,讓出了CPU資源給其他線(xiàn)程。這樣可以增加程序的并發(fā)性,使得多個(gè)線(xiàn)程可以更公平地使用CPU資源。

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!