Diferencia clave - dormir vs esperar en Java
Dormir y esperar son dos métodos que se utilizan para el subproceso múltiple en Java. El método de suspensión pertenece a la clase Thread, mientras que el método de espera pertenece a la clase Object. La diferencia clave entre dormir y esperar en Java es que, el sueño 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 invoca la notificación o Notificar a todos para el objeto.
Un hilo es la unidad más pequeña de procesamiento en el sistema operativo. Es un único flujo de control secuencial dentro de un programa. Los hilos son ligeros. El subproceso múltiple es el mecanismo de ejecutar varios subprocesos al mismo tiempo. Los lenguajes de programación, como Java, admiten subprocesos múltiples. El subproceso múltiple tiene ventajas porque permite ejecutar varios subprocesos simultáneamente y los subprocesos son independientes entre sí. Hay métodos en Java que se pueden utilizar para subprocesos múltiples. Dos de ellos duermen y esperan.
CONTENIDO
1. Descripción general y diferencia clave
2. Qué es la suspensión en Java
3. Qué es la espera en Java
4. Similitudes entre la suspensión y la espera en Java
5. Comparación lado a lado: suspensión frente a espera en Java en forma tabular
6. Resumen
¿Qué es dormir en Java?
Hay varios procesos que se ejecutan 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 hilo. Cuando se ejecuta el hilo, el código que debe ejecutarse se escribe dentro del método de ejecución. El planificador de subprocesos selecciona el subproceso que debe ejecutarse. Solo se ejecuta un hilo 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 hilo está en el nuevo estado. El programador de subprocesos selecciona un subproceso para ejecutar. Si el subproceso aún no ha sido seleccionado por el programador de subprocesos pero si se invoca el método de inicio, entonces el subproceso está en un estado ejecutable. Después de que el programador de subprocesos selecciona el subproceso a ejecutar, pasa al estado de ejecución. Si el hilo está vivo pero no es actualmente apto para ejecutarse, entonces está en estado bloqueado o no ejecutable. Después de completar el método de ejecución, el hilo pasa al estado terminado. Estas son las principales fases del ciclo de vida del hilo.
Hay varios métodos disponibles en la clase de hilo para realizar diferentes tareas. El método de sueño se utiliza para dormir el método durante un período de tiempo específico. La sintaxis del método de suspensión es public void sleep (milisegundos largos) lanza InterruptedException. 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.
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 hilo termine la ejecución durante 1000 milisegundos. Cuando un hilo está inactivo, el programador de hilos toma el otro hilo.
¿Qué es esperar en Java?
Varios subprocesos pueden acceder a un recurso compartido. Puede hacer 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. Estos 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 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, se detiene la ejecución de un subproceso en su sección crítica y se permite que otro subproceso entre en la misma sección crítica para su ejecución. Se implementa mediante los métodos de esperar, notificar y notificar 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 invoca el método notificar o notificar a todos para el objeto. El método de notificación se utiliza para despertar un solo hilo que está esperando el bloqueo. Notificar a todos despierta todos los subprocesos que están esperando en el bloqueo.
Figura 02: Clase de calculadora
Figura 03: Método principal
La clase Calculadora extiende el Thread. El bloque sincronizado está dentro del método de ejecución. El método de notificación y bucle for está dentro del bloque sincronizado. Dentro del método principal, se crea una instancia de un hilo 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 hilo 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, dará el resultado como cero porque no está esperando que se complete el otro hilo.
Calculadora t1 = nueva Calculadora ();
t1. comienzo ();
System.out.println (t1.sum);
¿Cuál es la similitud entre dormir y esperar en Java?
Tanto la suspensión como la espera son métodos que se pueden utilizar al implementar subprocesos múltiples en Java
¿Cuál es la diferencia entre dormir y esperar en Java?
Diferencia del medio del artículo antes de la mesa
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 invoca el método notificar o notificar 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 hilo 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. |
Terminació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 notificar o notificar a todos. |
Resumen: dormir vs esperar en Java
Hay varios procesos que se ejecutan en el sistema operativo. Cada proceso puede tener varios subprocesos. Un hilo 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 subprocesos simultáneamente. La suspensión y la espera son dos métodos que se pueden utilizar al implementar subprocesos múltiples. La diferencia entre dormir y esperar en Java es que, el sueño 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 invoca la notificación o notificación método para el objeto.