wait()
和 notify()
是 Java 中兩個重要的方法,它們主要用于多線程編程中的線程間通信。這兩個方法都定義在 Object
類中,因此所有的 Java 對象都可以使用它們。它們的主要區(qū)別在于它們的作用和用法。
wait()
:
wait()
方法時,該線程會釋放該對象的所有鎖,然后進入等待狀態(tài),直到其他線程調(diào)用同一個對象的 notify()
或 notifyAll()
方法喚醒它。wait()
方法通常與 synchronized
關(guān)鍵字一起使用,以確保線程安全。wait()
方法會拋出 InterruptedException
異常,因此調(diào)用者需要處理這個異常。wait()
方法只能被調(diào)用一次,否則會拋出 IllegalMonitorStateException
異常。notify()
:
notify()
方法時,它會喚醒在該對象上等待的單個線程。具體喚醒哪個線程是不確定的,取決于操作系統(tǒng)的線程調(diào)度策略。notify()
方法通常與 synchronized
關(guān)鍵字一起使用,以確保線程安全。notify()
方法不會拋出異常。notify()
方法時沒有線程在等待,那么沒有任何效果。總結(jié)一下,wait()
和 notify()
都是用于線程間通信的方法,它們的主要區(qū)別在于:
wait()
方法使當前線程等待,并釋放對象鎖;而 notify()
方法喚醒等待在當前對象上的一個線程。wait()
方法會拋出 InterruptedException
異常;而 notify()
方法不會拋出異常。wait()
方法只能被調(diào)用一次;而 notify()
方法可以多次調(diào)用。