首頁 > Java > java教程 > 主體

wait()、notify() 和 notifyAll() 方法屬於哪個類別?

Barbara Streisand
發布: 2024-10-06 11:27:30
原創
537 人瀏覽過

Which Class Do the wait(), notify(), and notifyAll() Methods Belong To?

1. 理解wait()、notify()和notifyAll()方法

wait()notify()notifyAll() 方法是 Java 並發模型不可或缺的一部分。它們屬於 Object 類,是 Java 中類別層次結構的根。這意味著 Java 中的每個類別都從 Object 類別繼承這些方法。

1.1 物件類

Object類別是Java中所有類別的超類別。它提供了一組每個類別都繼承的基本方法,包括 toString()equals()hashCode()wait()notify()notifyAll() 方法也是此類的一部分,使執行緒能夠通訊和協調其活動。

1.2 wait()、notify()、notifyAll()的作用

  • wait():此方法導致當前執行緒等待,直到另一個執行緒對同一物件呼叫 notify()notifyAll()。它必須從同步區塊或方法中呼叫。
  • notify():此方法喚醒正在物件監視器(執行緒的鎖定)上等待的單一執行緒。如果有多個線程正在等待,則任意選擇其中一個。
  • notifyAll():此方法喚醒所有在物件監視器上等待的執行緒。當需要通知多個執行緒有關狀態變更的資訊時,這非常有用。

2. wait()、notify()和notifyAll()的實際使用

要了解這些方法的工作原理,讓我們來看一些實際範例。

2.1 範例程式碼

這是一個示範這些方法使用的簡單範例:


class SharedResource {
    private boolean available = false;

    public synchronized void consume() throws InterruptedException {
        while (!available) {
            wait(); // Wait until the resource is available
        }
        // Consume the resource
        System.out.println("Resource consumed.");
        available = false;
        notify(); // Notify that the resource is now unavailable
    }

    public synchronized void produce() {
        // Produce the resource
        available = true;
        System.out.println("Resource produced.");
        notify(); // Notify that the resource is available
    }
}

public class Main {
    public static void main(String[] args) {
        SharedResource resource = new SharedResource();

        Thread producer = new Thread(() -> {
            try {
                while (true) {
                    Thread.sleep(1000); // Simulate time to produce
                    resource.produce();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread consumer = new Thread(() -> {
            try {
                while (true) {
                    resource.consume();
                    Thread.sleep(2000); // Simulate time to consume
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        producer.start();
        consumer.start();
    }
}


登入後複製

2.2 演示結果

在上面的例子中:

  • 生產者執行緒會定期生產資源並通知消費者。
  • 消費者執行緒將等待資源可用,消耗它,然後在需要時通知生產者。

您將看到以下輸出,指示生產者和消費者操作:


Resource produced.
Resource consumed.
...


登入後複製

此輸出示範了 wait()notify()notifyAll() 如何協調生產者-消費者互動。

三、結論

透過了解wait()notify()notifyAll() 方法屬於哪個類別以及它們如何運作,您可以有效地管理Java 應用程式中的執行緒間通訊。這些方法對於確保執行緒有效地協作和共享資源至關重要。

如果您有任何疑問或需要進一步說明,請隨時在下面發表評論!

閱讀更多文章:wait()、notify() 和 notifyAll() 方法屬於哪個類別?

以上是wait()、notify() 和 notifyAll() 方法屬於哪個類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板