溫馨提示×

java wait與notify區(qū)別

小樊
81
2024-11-17 00:52:56
欄目: 編程語言

wait()notify() 是 Java 中兩個重要的方法,它們主要用于多線程編程中的線程間通信。這兩個方法都定義在 Object 類中,因此所有的 Java 對象都可以使用它們。它們的主要區(qū)別在于它們的作用和用法。

  1. wait():

    • 當一個線程調(diào)用某個對象的 wait() 方法時,該線程會釋放該對象的所有鎖,然后進入等待狀態(tài),直到其他線程調(diào)用同一個對象的 notify()notifyAll() 方法喚醒它。
    • wait() 方法通常與 synchronized 關(guān)鍵字一起使用,以確保線程安全。
    • wait() 方法會拋出 InterruptedException 異常,因此調(diào)用者需要處理這個異常。
    • wait() 方法只能被調(diào)用一次,否則會拋出 IllegalMonitorStateException 異常。
  2. notify():

    • 當一個線程調(diào)用某個對象的 notify() 方法時,它會喚醒在該對象上等待的單個線程。具體喚醒哪個線程是不確定的,取決于操作系統(tǒng)的線程調(diào)度策略。
    • notify() 方法通常與 synchronized 關(guān)鍵字一起使用,以確保線程安全。
    • notify() 方法不會拋出異常。
    • 如果調(diào)用 notify() 方法時沒有線程在等待,那么沒有任何效果。

總結(jié)一下,wait()notify() 都是用于線程間通信的方法,它們的主要區(qū)別在于:

  • wait() 方法使當前線程等待,并釋放對象鎖;而 notify() 方法喚醒等待在當前對象上的一個線程。
  • wait() 方法會拋出 InterruptedException 異常;而 notify() 方法不會拋出異常。
  • wait() 方法只能被調(diào)用一次;而 notify() 方法可以多次調(diào)用。

0