Maison  >  Article  >  Java  >  À quelle classe appartiennent les méthodes wait(), notify() et notifyAll() ?

À quelle classe appartiennent les méthodes wait(), notify() et notifyAll() ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-06 11:27:30432parcourir

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

1. Comprendre les méthodes wait(), notify() et notifyAll()

Les méthodes wait(), notify() et notifyAll() font partie intégrante du modèle de concurrence de Java. Ils appartiennent à la classe Object, qui est la racine de la hiérarchie des classes en Java. Cela signifie que chaque classe Java hérite de ces méthodes de la classe Object.

1.1 La classe d'objet

La classe Object est la superclasse de toutes les classes en Java. Il fournit un ensemble de méthodes de base dont chaque classe hérite, notamment toString(), equals() et hashCode(). Les méthodes wait(), notify() et notifyAll() font également partie de cette classe, permettant aux threads de communiquer et de coordonner leurs activités.

1.2 Le rôle de wait(), notify() et notifyAll()

  • wait() : Cette méthode fait attendre le thread actuel jusqu'à ce qu'un autre thread invoque notify() ou notifyAll() sur le même objet. Il doit être appelé depuis un bloc ou une méthode synchronisée.
  • notify() : Cette méthode réveille un seul thread qui attend sur le moniteur de l'objet (le verrou du thread). Si plusieurs fils de discussion sont en attente, l'un d'entre eux est choisi arbitrairement.
  • notifyAll() : Cette méthode réveille tous les threads qui attendent sur le moniteur de l'objet. Ceci est utile lorsque plusieurs threads doivent être informés d'un changement d'état.

2. Utilisation de wait(), notify() et notifyAll() en pratique

Pour comprendre le fonctionnement de ces méthodes, regardons quelques exemples pratiques.

2.1 Exemple de code

Voici un exemple simple illustrant l’utilisation de ces méthodes :


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 Résultats de la démonstration

Dans l'exemple ci-dessus :

  • Le fil producteur produira périodiquement une ressource et informera le consommateur.
  • Le fil consommateur attendra que la ressource soit disponible, la consommera, puis avertira le producteur si nécessaire.

Vous verrez le résultat suivant indiquant les opérations du producteur et du consommateur :


Resource produced.
Resource consumed.
...


Ce résultat montre comment wait(), notify() et notifyAll() coordonnent l'interaction producteur-consommateur.

3.Conclusion

En comprenant à quelle classe appartiennent les méthodes wait(), notify() et notifyAll() et comment elles fonctionnent, vous pouvez gérer efficacement communication inter-thread dans vos applications Java. Ces méthodes sont essentielles pour garantir que les threads coopèrent et partagent efficacement les ressources.

Si vous avez des questions ou avez besoin de précisions supplémentaires, n'hésitez pas à laisser un commentaire ci-dessous !

Lisez les articles plus sur : À quelle classe appartiennent les méthodes wait(), notify() et notifyAll() ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:jUnit - Tests unitaires en JavaArticle suivant:Aucun