Heim > Java > javaLernprogramm > Hauptteil

Zu welcher Klasse gehören die Methoden wait(), notify() und notifyAll()?

Barbara Streisand
Freigeben: 2024-10-06 11:27:30
Original
537 Leute haben es durchsucht

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

1. Verstehen der Methoden wait(), notify() und notifyAll()

Die Methoden wait(), notify() und notifyAll() sind integraler Bestandteil des Parallelitätsmodells von Java. Sie gehören zur Klasse Object, die die Wurzel der Klassenhierarchie in Java darstellt. Das bedeutet, dass jede Klasse in Java diese Methoden von der Klasse Object erbt.

1.1 Die Objektklasse

Die Object-Klasse ist die Oberklasse aller Klassen in Java. Es bietet eine Reihe grundlegender Methoden, die jede Klasse erbt, einschließlich toString(), equals() und hashCode(). Die Methoden wait(), notify() und notifyAll() sind ebenfalls Teil dieser Klasse und ermöglichen es Threads, ihre Aktivitäten zu kommunizieren und zu koordinieren.

1.2 Die Rolle von wait(), notify() und notifyAll()

  • wait(): Diese Methode bewirkt, dass der aktuelle Thread wartet, bis ein anderer Thread notify() oder notifyAll() für dasselbe Objekt aufruft. Es muss aus einem synchronisierten Block oder einer synchronisierten Methode heraus aufgerufen werden.
  • notify(): Diese Methode weckt einen einzelnen Thread, der auf dem Monitor des Objekts (der Sperre des Threads) wartet. Wenn mehrere Threads warten, wird einer davon willkürlich ausgewählt.
  • notifyAll(): Diese Methode weckt alle Threads, die auf dem Monitor des Objekts warten. Dies ist nützlich, wenn mehrere Threads über eine Statusänderung informiert werden müssen.

2. Verwendung von wait(), notify() und notifyAll() in der Praxis

Um zu verstehen, wie diese Methoden funktionieren, schauen wir uns einige praktische Beispiele an.

2.1 Beispielcode

Hier ist ein einfaches Beispiel, das die Verwendung dieser Methoden demonstriert:


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();
    }
}


Nach dem Login kopieren

2.2 Demo-Ergebnisse

Im obigen Beispiel:

  • Der Produzenten-Thread produziert regelmäßig eine Ressource und benachrichtigt den Verbraucher.
  • Der Verbraucherthread wartet, bis die Ressource verfügbar ist, verbraucht sie und benachrichtigt dann bei Bedarf den Produzenten.

Sie sehen die folgende Ausgabe, die die Produzenten- und Verbrauchervorgänge angibt:


Resource produced.
Resource consumed.
...


Nach dem Login kopieren

Diese Ausgabe zeigt, wie wait(), notify() und notifyAll() die Producer-Consumer-Interaktion koordinieren.

3. Fazit

Wenn Sie verstehen, zu welcher Klasse die Methoden wait(), notify() und notifyAll() gehören und wie sie funktionieren, können Sie effektiv verwalten Inter-Thread-Kommunikation in Ihren Java-Anwendungen. Diese Methoden sind wichtig, um sicherzustellen, dass Threads zusammenarbeiten und Ressourcen effizient teilen.

Wenn Sie Fragen haben oder weitere Erläuterungen benötigen, können Sie unten gerne einen Kommentar hinterlassen!

Weitere Beiträge finden Sie unter: Zu welcher Klasse gehören die Methoden wait(), notify() und notifyAll()?

Das obige ist der detaillierte Inhalt vonZu welcher Klasse gehören die Methoden wait(), notify() und notifyAll()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage