在Java中,wait(0)和yield()是兩個非常重要的方法。它們可以幫助我們控制線程的執行順序,從而提高程序的性能。
首先,我們來看一下wait(0)方法。這個方法的作用是讓當前線程等待一段時間,時間為0表示線程立即進入等待狀態。通常情況下,我們會給wait()方法傳遞一個時間參數,表示讓線程等待多少毫秒。但是如果我們傳遞0或者一個負數,那么線程就會立即進入等待狀態,直到被其他線程喚醒。需要注意的是,wait()方法必須在synchronized塊中調用。
public class WaitThread extends Thread { public synchronized void run() { try { System.out.println("等待..."); wait(0); System.out.println("喚醒..."); } catch (InterruptedException e) { e.printStackTrace(); } } } public class TestWait { public static void main(String[] args) { WaitThread waitThread = new WaitThread(); waitThread.start(); synchronized (waitThread) { waitThread.notifyAll(); } } }
接下來,我們再看一下yield()方法。這個方法的作用是讓當前線程放棄當前的CPU執行時間,讓其他的線程有更多的機會去執行。這個方法并不會讓線程進入等待狀態,而是讓線程重新回到就緒狀態。需要注意的是,yield()方法并不能保證讓其他的線程有更多的機會去執行,只是增加了其他線程被執行的可能性。
public class YieldThread extends Thread { public void run() { for (int i = 0; i< 5; i++) { System.out.println(getName() + "執行,i = " + i); yield(); } } } public class TestYield { public static void main(String[] args) { YieldThread t1 = new YieldThread(); YieldThread t2 = new YieldThread(); t1.start(); t2.start(); } }
總結一下,wait(0)方法讓當前線程立即進入等待狀態,直到被其他線程喚醒;yield()方法讓當前線程放棄CPU執行時間,重新回到就緒狀態,讓其他線程有更多的機會去執行。