Java中的await和wait是兩種不同的機制,分別用于協調線程的執行和實現線程之間的同步。下面分別來介紹這兩個機制。
await機制
// 對于Lock對象來說,await()和signal()方法必須在同一個lock塊中執行; // 而對于Condition對象來說,則沒有這個限制,因為signal()方法是同步的 Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); // 線程1 lock.lock(); try { while (!checkCondition()) { condition.await(); } // do something... } finally { lock.unlock(); } // 線程2 lock.lock(); try { // update condition condition.signal(); } finally { lock.unlock(); }
上面的代碼中,首先創建了一個Lock對象和Condition對象。在線程1中,使用await()方法來等待條件的滿足。線程2中,則使用signal()方法來通知線程1已經可以繼續執行。
wait機制
// 線程1 synchronized (obj) { while (!condition) { obj.wait(); } // do something... } // 線程2 synchronized (obj) { // update condition obj.notify(); }
wait()方法和notify()方法是Object類中的方法,用于實現線程之間的同步。在線程1中,使用wait()方法來等待條件的滿足。線程2則使用notify()方法來通知線程1已經可以繼續執行。
總結來說,await機制和wait機制都可以實現線程之間的同步,不同的地方在于使用的對象不同,以及執行方式的一些細節。在使用的過程中,需要注意線程之間的安全性和條件的正確判斷和更新。