Recomendado, 2024

La Elección Del Editor

Diferencia entre el método sleep () y wait () en Java

El método dormir y esperar suena como hacer la misma tarea, pero son muy diferentes entre sí. El método de suspensión pertenece a la clase Thread y el método de espera pertenece a la clase Object. La diferencia más importante que distingue a ambos es que el método de suspensión mantiene el bloqueo en el objeto hasta que se interrumpe o termina su ejecución. Por otro lado, el método de espera libera el bloqueo en el objeto para permitir que los otros objetos se ejecuten hasta que se reanude mediante el método de notificación. Hay algunas diferencias más entre el método de espera y de espera; Puedes explorarlos en el cuadro de comparación que se muestra a continuación.

Gráfica comparativa

Bases para la comparacióndormirEspere
BASICEl método de suspensión no libera el bloqueo de un objeto hasta que se interrumpe.El método de espera libera el bloqueo en el objeto para permitir que otros objetos se ejecuten hasta que se invoque el método de notificación o notificación de todo.
ClaseEl método del sueño se define en la clase Thread.El método de espera se define en la clase de objeto.
SincronizadoEl método de suspensión no necesita ser llamado dentro del contexto sincronizado.El método de espera tiene que ser llamado dentro del contexto sincronizado.
TerminaciónLa ejecución del método de suspensión se completa cuando un subproceso lo interrumpe o el tiempo de espera se agota.La ejecución del método de espera se completa cuando lo interrumpe el método notificar () o notificarlo ().
EstáticoEl método del sueño es un método estático.El método de espera no es estático, por eso necesita un objeto para invocarlo.
EjecuciónEl método de suspensión se ejecuta en el hilo actual.El método de espera se ejecuta en el objeto.
ExcepciónExcepción interrumpidaIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definición del método del sueño

El método sleep es el método estático de la clase Thread . El método de suspensión se invoca cuando un subproceso no desea realizar ninguna tarea durante un período de tiempo determinado. El método de suspensión completa su ejecución cuando el tiempo del método caduca o se interrumpe por algún otro hilo en la ejecución. Una vez que el método de suspensión se ha completado, el hilo vuelve a ganar su estado de ejecución. Hay dos formas del método de sueño como se muestra a continuación.

 sueño estático nativo público vacío (milisegundo largo); sueño vacío estático público (milisegundos largos e int nanosegundos); 

En las dos formas anteriores, puede observar que el tiempo se menciona tanto en la forma del método de sueño. Esto se debe a que un hilo siempre duerme durante un tiempo determinado mencionado en el parámetro. El método de suspensión puede ser interrumpido por cualquier otro hilo durante su ejecución; Por lo tanto, puede lanzar la InterruptedExecption. Debe tener cuidado de que la excepción sea manejada por el bloque try / catch o por las palabras clave Throws, de lo contrario, se producirá un error de tiempo de compilación. El método de suspensión mantiene el bloqueo en el objeto actual en la ejecución y no permite que ningún otro objeto se ejecute hasta que finalice su ejecución.

Definición de método de espera

Esperar es el método definido en la clase Objeto . El método de espera se usa cuando varias tareas (subprocesos) luchan por el mismo recurso de una en una. El método de espera cuando se invoca libera el bloqueo en el objeto que ha invocado el método de espera. Y dar la oportunidad a otro objeto para que se ejecute hasta que se invoque un método de notificación que reanude aún más el bloqueo en el objeto liberado por el método de espera. El método de espera tiene la siguiente forma.

 Espere(); espera (milisegundo largo); espera (milisegundo largo, int nanosegundo); 

Como en las tres formas anteriores del método de espera, el primer método no tiene un parámetro de tiempo, lo que significa que la ejecución del método de espera continuará hasta que no se invoque el método de notificación, o notificar a todos. Los otros dos métodos tienen parámetros de tiempo. Por lo tanto, se ejecutarán hasta que el tiempo expire o hasta que el método de notificación o noitfyAll se invoque antes de que el tiempo expire. El método de espera puede lanzar excepciones. IllegalArgumentException, si el argumento de tiempo pasado es negativo. IllegalMonitorStateException, si el subproceso actual no está utilizando el recurso. InterruptedException, si se interrumpe el método de espera.

Diferencias clave entre el sueño y el método de espera en Java

  1. El punto principal que distingue el método de espera y espera es que el método de suspensión mantiene el bloqueo en el objeto hasta que se interrumpe o su tiempo expira. Sin embargo, el método de espera libera el bloqueo en el objeto que lo invoca y le da a otros objetos la oportunidad de ejecutar.
  2. El método de suspensión se define en la clase Thread, mientras que el método de espera se define en la clase Object .
  3. El método de suspensión no necesita ser llamado desde el contexto sincronizado. Pero el método de espera necesita ser llamado desde sincronizado.
  4. El método de suspensión se activa si el tiempo del método caduca o se interrumpe por el otro hilo. Se despierta el método de espera.
    cuando se invoca el método de notificar o notificar todo.
  5. El método de suspensión es un método estático, mientras que el método de espera no es un método estático .
  6. El método de suspensión se ejecuta en el hilo actual, mientras que el método de espera se ejecuta en el objeto que lo invoca.
  7. La excepción emitida por el método de suspensión es InterruptedException, mientras que las excepciones lanzadas por el método de espera son IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Conclusión:

Cuando varios subprocesos quieren usar el mismo recurso uno por uno, entonces se debe usar el método de espera. Cuando un hilo no desea realizar ninguna tarea, entonces debe usarse el método de suspensión.

Top