Los métodos wait() y join() se utilizan para pausar el hilo actual. El método wait() se usa con los métodos notificar() y notificarTodos(), pero join() se usa en Java para esperar hasta que un subproceso termine su ejecución. wait() se usa principalmente para recursos compartidos, un hilo notifica a otro hilo en espera cuando un recurso queda libre. Por otro lado, join() se usa para esperar que un hilo muera.
Similitudes entre wait() y join()
- Los métodos wait() y join() se usan para pausar el hilo actual en Java.
- Tanto wait() como join() pueden interrumpirse llamando al método interrupt() en Java.
- Tanto wait() como join() son métodos no estáticos.
- Tanto wait() como join() están sobrecargados en Java. wait() y join() que sin tiempo de espera y acepta un parámetro de tiempo de espera.
Diferencia entre el método wait() y join()
- La diferencia más obvia es que ambos están presentes en paquetes diferentes, el método wait() se declara en la clase java.lang.Object mientras que join() se declara en la clase java.lang.Thread.
- El wait() se usa para la comunicación entre subprocesos, mientras que el join() se usa para agregar secuencias entre múltiples subprocesos, un subproceso comienza la ejecución después de que finaliza la ejecución del primer subproceso.
- Podemos iniciar un subproceso de espera (entró en este estado llamando a wait()) mediante el método de notificación() y de notificación a todos(), pero no podemos romper la espera impuesta por la unión sin que el subproceso en el que se llama a la unión tenga ejecución. acabado.
- Una de las diferencias más importantes entre wait() y join() es que wait() debe llamarse desde un contexto sincronizado, es decir, un bloque o método sincronizado; de lo contrario, lanzará IllegalMonitorStateException pero, por otro lado, podemos llamar al método join() con y sin sincronización. contexto en Java.
Entendamos las diferencias en forma tabular:
Espere() | unirse() |
Es un método de la clase java.lang.Object. | Es un método de java.lang. |
El método wait() puede ser llamado por un bloque o método sincronizado. | Se utiliza para detener el hilo actual. |
El método wait() se implementa para realizar la sincronización de subprocesos múltiples. | Se puede llamar con cotexto sincronizado y sin sincronizar. |
Su sintaxis es -: public final void wait() lanza InterruptedException |
Su sintaxis es -: public final void join() lanza InterruptedException |
El método wait() hace que el subproceso se duerma hasta que se llame a notificar() y notificar a todos() | Se puede usar para agregar secuencia entre más de un hilo. |