"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿A qué clase pertenecen los métodos wait(), notify() y notifyAll()?

¿A qué clase pertenecen los métodos wait(), notify() y notifyAll()?

Publicado el 2024-11-01
Navegar:582

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

1. Comprender los métodos wait(), notify() y notifyAll()

Los métodos wait(), notify() y notifyAll() son ​​parte integral del modelo de concurrencia de Java. Pertenecen a la clase Object, que es la raíz de la jerarquía de clases en Java. Esto significa que cada clase en Java hereda estos métodos de la clase Object.

1.1 La clase de objeto

La clase Objeto es la superclase de todas las clases en Java. Proporciona un conjunto de métodos básicos que hereda cada clase, incluidos toString(), equals() y hashCode(). Los métodos wait(), notify() y notifyAll() también forman parte de esta clase, lo que permite que los subprocesos se comuniquen y coordinen sus actividades.

1.2 El papel de esperar (), notificar () y notificar a todos ()

  • wait(): Este método hace que el hilo actual espere hasta que otro hilo invoque notify() o notifyAll() en el mismo objeto. Debe llamarse desde un bloque o método sincronizado.
  • notify(): Este método activa un único subproceso que está esperando en el monitor del objeto (el bloqueo del subproceso). Si hay varios subprocesos en espera, uno de ellos se elige arbitrariamente.
  • notifyAll(): este método activa todos los subprocesos que están esperando en el monitor del objeto. Esto es útil cuando es necesario informar a varios subprocesos sobre un cambio de estado.

2. Uso de wait(), notify() y notifyAll() en la práctica

Para comprender cómo funcionan estos métodos, veamos algunos ejemplos prácticos.

2.1 Código de ejemplo

Aquí hay un ejemplo sencillo que demuestra el uso de estos métodos:


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 Resultados de la demostración

En el ejemplo anterior:

  • El hilo productor producirá periódicamente un recurso y notificará al consumidor.
  • El hilo del consumidor esperará hasta que el recurso esté disponible, lo consumirá y luego notificará al productor si es necesario.

Verá el siguiente resultado indicando las operaciones del productor y del consumidor:


Resource produced.
Resource consumed.
...


Este resultado demuestra cómo wait(), notify() y notifyAll() coordinan la interacción productor-consumidor.

3.Conclusión

Al comprender a qué clase pertenecen los métodos wait(), notify() y notifyAll() y cómo funcionan, podrá administrar eficazmente comunicación entre subprocesos en sus aplicaciones Java. Estos métodos son esenciales para garantizar que los subprocesos cooperen y compartan recursos de manera eficiente.

Si tienes alguna pregunta o necesitas más aclaraciones, ¡no dudes en dejar un comentario a continuación!

Lea más publicaciones en: ¿A qué clase pertenecen los métodos wait(), notify() y notifyAll()?

Declaración de liberación Este artículo se reproduce en: https://dev.to/anh_trntun_4732cf3d299/what-class-do-the-wait-notify-and-notifyall-methods-belong-to-58bp?1 Si hay alguna infracción, comuníquese con Study_golang @163.com eliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3