在Java中,yield是一個(gè)靜態(tài)方法,它屬于Thread類,用于提示線程調(diào)度器當(dāng)前線程愿意放棄當(dāng)前的CPU資源,但是并不會(huì)導(dǎo)致線程進(jìn)入阻塞狀態(tài)。調(diào)用yield()方法會(huì)讓當(dāng)前線程從運(yùn)行狀態(tài)轉(zhuǎn)為就緒狀態(tài),然后讓系統(tǒng)的線程調(diào)度器重新選擇線程執(zhí)行。
在多線程編程中,使用yield方法可以讓線程更有序地執(zhí)行,提高程序的效率。但是由于yield方法并不保證當(dāng)前線程一定會(huì)放棄CPU資源,因此不能過分依賴yield方法來控制線程的執(zhí)行順序。
下面是一個(gè)簡(jiǎn)單的示例代碼,演示了如何使用yield方法:
public class YieldExample implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " is running");
Thread.yield();
}
}
public static void main(String[] args) {
YieldExample example = new YieldExample();
Thread thread1 = new Thread(example, "Thread 1");
Thread thread2 = new Thread(example, "Thread 2");
thread1.start();
thread2.start();
}
}
在上面的示例中,我們創(chuàng)建了兩個(gè)線程,并在每個(gè)線程的運(yùn)行過程中調(diào)用了Thread.yield()方法。運(yùn)行該程序,可以看到兩個(gè)線程交替執(zhí)行,但并不能保證每次都是交替執(zhí)行,因?yàn)閥ield方法只是一個(gè)提示,具體的線程調(diào)度由系統(tǒng)的線程調(diào)度器決定。