Java中的wait()方法定義在Object類中,用於使當前執行緒等待,直到其他執行緒通過調用notify()或notifyAll()方法來喚醒它。當執行緒調用wait()方法時,它會釋放鎖,進入等待狀態,允許其他執行緒訪問被鎖定的資源。
wait()方法通常與synchronized關鍵字一起使用,以確保執行緒在等待時釋放鎖。以下是其使用方法:
在同步方法或同步塊中調用wait()方法。如果沒有持有適當的鎖,將拋出IllegalMonitorStateException異常。
wait(long timeout)允許執行緒等待指定的時間後自動喚醒。如果在這段時間內沒有其他執行緒調用notify()或notifyAll()方法,則執行緒會自動喚醒。
wait()方法的使用應結合循環進行,以防止虛假喚醒(spurious wakeup),即在未被其他執行緒通知的情況下被喚醒。
此外,notify()和notifyAll()方法也需要在同步方法或同步塊中調用,它們分別喚醒單個或所有等待的執行緒。喚醒的執行緒需要重新獲取鎖才能繼續執行。