Diferencia entre dormir y esperar en Java

Tabla de contenido:

Diferencia entre dormir y esperar en Java
Diferencia entre dormir y esperar en Java

Video: Diferencia entre dormir y esperar en Java

Video: Diferencia entre dormir y esperar en Java
Video: Dos formas de dormir la ejecución de un programa Java | Executor.Shedule vs Thread.Sleep 2024, Noviembre
Anonim

Diferencia clave: dormir vs esperar en Java

Dormir y esperar son dos métodos utilizados para subprocesos múltiples en Java. El método de suspensión pertenece a la clase Thread mientras que el método de espera es de la clase Object. La diferencia clave entre dormir y esperar en Java es que, la suspensión se usa para suspender la ejecución del subproceso actual durante el número especificado de milisegundos, mientras que el método de espera se usa para hacer que el subproceso actual espere hasta que otro subproceso invoque la notificación o método de notificación para el objeto.

Un subproceso es la unidad de procesamiento más pequeña del sistema operativo. Es un único flujo secuencial de control dentro de un programa. Los hilos son ligeros. El subprocesamiento múltiple es el mecanismo de ejecutar varios subprocesos al mismo tiempo. Los lenguajes de programación como Java admiten subprocesos múltiples. Multithreading tiene ventajas porque permite ejecutar múltiples subprocesos simultáneamente y los subprocesos son independientes entre sí. Hay métodos en Java que se pueden usar para subprocesos múltiples. Dos de ellos son dormir y esperar.

¿Qué es dormir en Java?

Hay múltiples procesos ejecutándose en un sistema operativo. Un proceso es un programa en ejecución. Cada proceso puede tener varios subprocesos y se produce un cambio de contexto entre estos subprocesos. En Java, hay dos formas de crear un hilo. Eso es extendiendo la clase de hilo o implementando la interfaz Runnable. La clase Thread tiene constructores y métodos para crear y realizar operaciones en un hilo. La clase Thread extiende la clase Object e implementa la interfaz Runnable. La interfaz Runnable debe ser implementada por cualquier clase cuyas instancias estén destinadas a ser ejecutadas por un subproceso. Cuando se ejecuta el subproceso, el código que debe ejecutarse se escribe dentro del método de ejecución. El programador de subprocesos selecciona el subproceso que debe ejecutarse. Solo se ejecuta un subproceso en un solo proceso.

Un hilo pasa por varias fases. Después de crear un objeto de la clase Thread, el programador puede invocar el método de inicio. Antes de invocar ese método, se dice que el subproceso está en el nuevo estado. El programador de subprocesos selecciona un subproceso para ejecutar. Si el programador de subprocesos aún no ha seleccionado el subproceso, pero se invoca el método de inicio, entonces el subproceso se encuentra en un estado ejecutable. Después de que el programador de subprocesos selecciona el subproceso para ejecutar, pasa al estado de ejecución. Si el subproceso está activo pero actualmente no es elegible para ejecutarse, entonces está en un estado no ejecutable o bloqueado. Después de completar el método de ejecución, el subproceso pasa al estado terminado. Esas son las fases principales del ciclo de vida del subproceso.

Hay varios métodos disponibles en la clase de subprocesos para realizar diferentes tareas. El método de suspensión se utiliza para dormir el método durante un período de tiempo específico. La sintaxis para el método de suspensión es suspensión pública nula (milisegundos largos) genera una excepción interrumpida. Hace que el subproceso que se está ejecutando actualmente detenga la ejecución temporalmente durante un número específico de milisegundos. Si otro subproceso interrumpe el subproceso actual, el estado interrumpido del subproceso actual se borra cuando se lanza esta excepción.

Diferencia entre dormir y esperar en Java
Diferencia entre dormir y esperar en Java

Figura 01: programa Java con método de suspensión

Según el programa anterior, el método de ejecución contiene código que debe ejecutarse. En el programa principal, se crean dos objetos de ExampleThread1 y se invocan los métodos de inicio en ellos. Eso permitirá ejecutar el código dentro del método de ejecución. Solo se ejecuta un hilo a la vez. Con el Hilo.dormir (1000); permitirá que el primer subproceso termine la ejecución durante 1000 milisegundos. Cuando un subproceso está inactivo, el planificador de subprocesos selecciona el otro subproceso.

¿Qué es esperar en Java?

Múltiples subprocesos pueden acceder a un recurso compartido. Puede causar que se genere una salida incorrecta. La sincronización de subprocesos se puede utilizar para hacer que solo un subproceso acceda al recurso compartido. Suponga una situación de la siguiente manera. Si hay dos subprocesos como t1 y t2, t1 comienza a guardar valores en un archivo de texto llamado Text1.txt. Esos valores se usarán para algún otro cálculo cuando t1 regrese. Si t2 comienza antes de que regrese t1, t2 puede cambiar los valores guardados por t1. Esto puede hacer que t1 proporcione una salida incorrecta. Con la ayuda de la sincronización, cuando t1 comienza a usar el archivo Text1.txt, ese archivo se puede bloquear, por lo que solo t1 puede acceder a él. El t2 no puede cambiarlo hasta que t1 libere el bloqueo para acceder a ese archivo de texto. Cuando se completa la tarea, el t1 puede liberar el bloqueo. La cerradura también se conoce como el monitor.

La sincronización de subprocesos se puede lograr mediante la comunicación entre subprocesos. Una sección crítica es un segmento de código que accede a los recursos compartidos. En la comunicación entre subprocesos, un subproceso se detiene en ejecución en su sección crítica y se permite que otro subproceso ingrese en la misma sección crítica para ser ejecutado. Se implementa utilizando los métodos de espera, notificación y notificación a todos. Pertenecen a la clase Object. El método de espera se usa para permitir que el subproceso actual libere el bloqueo y espere hasta que otro subproceso invoque el método de notificación o de notificación a todos para el objeto. El método de notificación se utiliza para activar un solo subproceso que está esperando el bloqueo. La notificación a Todos activa todos los subprocesos que están esperando en el bloqueo.

Diferencia entre dormir y esperar en Java_Figura 02
Diferencia entre dormir y esperar en Java_Figura 02

Figura 02: Clase de calculadora

Diferencia clave entre dormir y esperar en Java
Diferencia clave entre dormir y esperar en Java

Figura 03: Método principal

La clase Calculadora amplía el hilo. El bloque sincronizado está dentro del método de ejecución. El método de bucle for y notificación está dentro del bloque sincronizado. Dentro del método principal, se crea una instancia de un subproceso y se llama al método de inicio en esa instancia. El método principal esperará hasta que el hilo dé una notificación. Al ejecutar el programa, el método principal espera hasta la ejecución completa del método de ejecución y espera el método de notificación. Una vez que se llama al método de notificación, el método principal deja de esperar y comienza a ejecutar el resto del código. Main está esperando hasta que se complete el subproceso de la Calculadora. Finalmente, se imprime el resultado de la suma.

Si no hay un bloque sincronizado y si el método principal tiene un código como el siguiente, la salida será cero porque no está esperando que se complete el otro subproceso.

Calculadora t1=nueva Calculadora ();

t1. inicio ();

Sistema.fuera.println (t1.suma);

¿Cuál es la similitud entre dormir y esperar en Java?

Tanto dormir como esperar son métodos que se pueden usar al implementar subprocesos múltiples en Java

¿Cuál es la diferencia entre dormir y esperar en Java?

dormir vs esperar en Java

El método de suspensión hace que el subproceso actual suspenda la ejecución durante el número especificado de milisegundos, sujeto a la precisión y exactitud de los temporizadores y programadores del sistema. El método de espera hace que el subproceso actual espere hasta que otro subproceso invoque el método de notificación o de notificación a todos para el objeto.
Asociación con bloqueo
El método de suspensión no libera el bloqueo de un objeto durante la sincronización. El método de espera libera el bloqueo durante la sincronización.
Método de ejecución
El método de suspensión se ejecuta en el subproceso actual. Se llama al método de espera en el objeto.
Clase asociada
El sueño es un método de la clase Thread. La espera es un método de la clase Object.
Finalización
El proceso de suspensión se completa una vez transcurrido el tiempo especificado. El método de espera se interrumpe llamando a los métodos de notificación o de notificación a todos.

Resumen: dormir frente a esperar en Java

Hay varios procesos ejecutándose en el sistema operativo. Cada proceso puede tener varios subprocesos. Un subproceso es la unidad de procesamiento más pequeña en un sistema operativo. El lenguaje de programación Java admite subprocesos múltiples. Permite ejecutar múltiples hilos simultáneamente. La suspensión y la espera son dos métodos que se pueden usar al implementar subprocesos múltiples. La diferencia entre dormir y esperar en Java es que la suspensión se usa para suspender la ejecución del subproceso actual durante el número especificado de milisegundos, mientras que el método de espera se usa para hacer que el subproceso actual espere hasta que otro subproceso invoque la notificación o la notificación a todos. método para el objeto.

Recomendado: