Diferencia entre dormir y esperar (con mesa)

Java tiene varios métodos para realizar determinadas acciones. El método es un grupo de código, que se ejecuta solo cuando se lo llama; y puede o no devolver un resultado.

Los métodos como dormir y esperar se utilizan para subprocesos múltiples. Ambos pausan y envían el hilo a espera, pero tienen grandes diferencias en el funcionamiento.

Dormir vs esperar

La diferencia entre el método sleep () y wait () es que el método sleep () se usa en el programa para pausar la ejecución del hilo actual durante un período de tiempo particular, mientras que el método wait () se usa en el programa para pausar o suspender el hilo actual hasta que se invoquen métodos específicos.

Durante el uso del método de suspensión, el hilo actual no pierde la propiedad del monitor. El sueño es un método estático y es parte del hilo de la clase. Una vez finalizado el tiempo de espera, el hilo vuelve al estado ejecutable original. Asegura la utilización completa de la CPU, mientras espera.

Mientras que el método wait () se usa en el programa Java para ordenar al hilo actual que espere hasta que no se invoque otro hilo para ese objeto. Luego, el hilo continúa con la ejecución, una vez que obtiene el control del monitor. No es un método estático a diferencia del sueño, y es parte de la clase de objeto.

Tabla de comparación entre dormir y esperar

Parámetros de comparaciónDormir Esperar
ClaseEl método de suspensión es parte de la clase de hilo. El método de espera es parte de la clase de objeto.
Tipo de métodoEl sueño es un método estáticoEsperar no es un método estático
Técnica de llamadaEl método de suspensión se puede llamar desde fuera del contexto sincronizadoEl método de espera solo se puede llamar desde el contexto sincronizado
Liberación de bloqueoEl método de suspensión no libera el bloqueo del objeto, durante el tiempo de espera especificado, durante la sincronizaciónEl método Wait libera el bloqueo del objeto, para tener la oportunidad de ejecutarlo, durante la sincronización.
Declaraciónsueño vacío estático público () espera vacía final pública ()

¿Que es dormir?

El hilo sleep () es un método estático en el programa Java que suspende el hilo actual y lo pone en estado de espera durante un período de tiempo estipulado. Una vez que finaliza el tiempo y el estado de espera, la condición del hilo se cambia al estado ejecutable. Y luego espera a que la CPU continúe ejecutando.

El objetivo de este método es crear un retraso de unos segundos en el programa y, al mismo tiempo, aprovechar al máximo la CPU. Si el sistema está ocupado o sobrecargado, entonces el tiempo de espera o pausa es mayor y, de lo contrario, sería menor o igual al tiempo real.

El tipo de retorno del método de suspensión se puede decir vacío, ya que no devuelve ningún valor. El hilo de dormir no pierde el monitor ni bloquea el hilo que ya ha adquirido. Si en cualquier caso se altera el sueño, el hilo arrojaría Interrupted_Exception. La duración real de la suspensión del subproceso generalmente depende de los programadores y los temporizadores del sistema que forman parte del sistema operativo.

La sintaxis del método de suspensión es: suspensión de vacío estática pública (milisegundos largos)

sueño vacío estático público (milisegundos largos, nanosegundos int)

Aquí milisegundos y nanosegundos es el tiempo durante el cual el hilo estaría inactivo.

¿Qué es esperar?

Wait () es un método utilizado para la comunicación entre subprocesos. Siempre que se usa el hilo wait (), el hilo de llamada o actual se pausa y suspende, hasta que se invocan métodos como notificar () o notificar a todos () en el sistema.

El método notificar () despertaría el subproceso especificado mientras que notifyAll () es aplicable para cada subproceso. Cuando se sincroniza, el método de espera cede el bloqueo a los recursos. No hay valor de retorno del método Wait, por lo que se puede decir que devuelve void.

Las dos excepciones del método Wait son Interrupted_Exception (cuando el hilo actual se interrumpe durante su suspensión) e IllegalMonitorStateException (cuando el hilo actual no es el propietario del objeto en el monitor).

El método Wait es parte de la clase de objeto. El método solo es aplicable y se puede llamar a través de un bloque sincronizado. El método de espera libera la pantalla suspendida o bloqueada durante la sincronización. Y el método Wait permite exclusivamente que los subprocesos múltiples sincronizados accedan al mismo objeto uno por uno.

La sintaxis del método Wait es - public final void wait ()

Principales diferencias entre dormir y esperar

  1. El método de suspensión hace que el subproceso se suspenda durante un período de tiempo específico y particular, generalmente durante un tiempo de espera especificado, a menos que expire o se interrumpa, mientras que el método de espera hace que el subproceso se suspenda hasta que se invoquen métodos como notificar () o notificar a todos ().
  2. El método Sleep se ejecuta en un hilo mientras que el método Wait se ejecuta en un objeto.
  3. El método de suspensión se utiliza para la sincronización de tiempo, mientras que el método de espera se utiliza para la sincronización de varios subprocesos.
  4. Durante el subproceso de espera, varios subprocesos sincronizados pueden acceder al mismo objeto de forma adyacente mientras que en el subproceso de suspensión, varios subprocesos sincronizados tienen que esperar a que finalice el reposo del subproceso actual.
  5. El método Wait libera el bloqueo o el monitor, mientras que el método Sleep no libera el monitor durante la suspensión o espera del hilo actual.

Conclusión

El método Sleep y Wait son métodos nativos de Java. Y ambos se utilizan ampliamente para hacer que el hilo actual en curso entre en un estado de condición no ejecutable. Ambos métodos se utilizan para subprocesos múltiples en el programa.

El método de suspensión ofrece la opción exclusiva de bloquear la pantalla durante un período de tiempo específico que suele durar de nanosegundos a milisegundos. Pero el método de espera bloquea o suspende la pantalla hasta que se invoca otro método, por lo que la duración del tiempo no permanece específica como durante el uso del método de suspensión.

Se diferencian entre sí en términos de funcionamiento específico como clase, método, sincronización y la duración de bloqueo y liberación y varios otros parámetros. A menudo, los programadores se confunden sobre qué método podría ser ideal para suspender el hilo. El uso de los métodos depende de requisitos como la necesidad, la urgencia y el período de tiempo del hilo actual.

Referencias

  1. https://pdfs.semanticscholar.org/51fd/24ae444910fd39b117bb3044a12591f038fa.pdf
  2. https://dl.acm.org/doi/pdf/10.1145/289524.289572
x
2D vs 3D