JavaRush /Blog Java /Random-ES /Nivel 25. Respuestas a las preguntas de la entrevista sob...
zor07
Nivel 31
Санкт-Петербург

Nivel 25. Respuestas a las preguntas de la entrevista sobre el tema del nivel.

Publicado en el grupo Random-ES
Nivel 25. Respuestas a las preguntas de la entrevista sobre el tema del nivel - 1
  1. ¿Cuáles son todos los estados del objeto Thread?

    • NUEVO
    • EJECUTABLE
    • OBSTRUIDO
    • ESPERA
    • TIMED_WAITING
    • TERMINADO
  2. ¿A qué estados puede pasar un hilo al entrar en un bloque synchronized?

    • EJECUTABLE
    • OBSTRUIDO

    En RUNNABLE, si el bloque de código marcado synchronizedno está ocupado por otro hilo. De lo contrario, nuestro hilo recibirá el estado BLOQUEADO y esperará a que se libere el objeto mutex.

  3. ¿A qué estado irá el hilo al llamar al método wait()?

    Llamar a este método coloca el hilo en el estado de ESPERA.
    El método wait()solo se puede llamar dentro de un bloque synchronizeden un objeto mutex que ha sido "bloqueado" por el hilo actual; de lo contrario, el método generará una excepción IllegalMonitorStateException .

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    Cuando se llama a un método wait(), el hilo actual libera el bloqueo del objeto monitory entra en el estado de ESPERA, esperando que otro hilo llame monitor.notify()al método monitor.notifyAll(). Tan pronto como esto suceda, el hilo se activará y si el monitor no estaba ocupado, lo tomará y continuará trabajando.
    Si el monitor está ocupado por otro subproceso, el subproceso actual pasará al estado BLOQUEADO.

  4. ¿A qué estado irá el hilo al llamar al método wait(500)?

    Llamar a este método coloca el hilo en el estado TIMED_WAITING.
    Por analogía con el método wait(), wait(timeout)solo se puede llamar dentro de un bloque synchronizeden un objeto mutex que ha sido "bloqueado (bloqueado)" por el hilo actual.

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait(500);}

    Al llamar al método wait(), el hilo actual libera el bloqueo del objeto monitory entra en modo de suspensión durante 500 milisegundos. El objeto monitorpuede ser capturado por otro hilo.
    Después de 500 milisegundos, el hilo se activará y, si monitorno estaba ocupado, lo tomará y continuará trabajando.
    Si el monitor está ocupado por otro subproceso, el subproceso actual pasará al estado BLOQUEADO.

    ¿A qué estado irá el hilo al llamar al método notify()?

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    Después monitor.wait(), el hilo pasará al estado de ESPERA. Un método notify()llamado por otro subproceso en un objeto monitormoverá el subproceso del estado EN ESPERA al estado EJECUTABLE a menos que el objeto monitor sea capturado por otro subproceso; de lo contrario, al estado BLOQUEADO.

  5. ¿A qué estado irá el hilo al llamar al método notifyAll()?

    notifyAll()"Se quedará" todos los hilos. Uno de todos los subprocesos "inactivos" (ESPERA) pasará al estado EJECUTABLE, se hará cargo del monitor del objeto que se está utilizando y continuará su trabajo. El resto estará en estado BLOQUEADO. Tan pronto como el primer subproceso "despertador" libere el monitor, que todos los demás están esperando, su destino será repetido por el siguiente subproceso (un subproceso arbitrario pasará del estado BLOQUEADO al estado EJECUTABLE). Esto continuará hasta que todos los subprocesos "despertados" abandonen el estado BLOQUEADO.

  6. Tres subprocesos en el bloque sincronizado se denominan wait()objeto mutex. ¿A qué estado llegarán estos subprocesos si llama el cuarto subproceso notifyAll()?

    Dos de ellos pasarán al estado BLOQUEADO, uno al estado EJECUTABLE

  7. ¿ En qué se diferencia join(500)de wait(500)?

    A pesar de que y join(500)transferirá wait(500)el hilo actual al estado TIMED_WAITING, existen diferencias significativas entre ellos:
    join(500)llamado en un hilo, wait(500)llamado dentro de un bloque sincronizado en el objeto en el que está sincronizado este bloque.
    Cuando se llama, join(500)el hilo actual esperará 500 milisegundos hasta que join()se complete el hilo cuyo método fue llamado.
    Cuando se llama, wait(500)el hilo actual liberará el bloqueo del objeto sincronizado y entrará en suspensión durante 500 milisegundos.
    Después de 500 milisegundos, en ambos casos los subprocesos seguirán funcionando.

  8. ¿ En qué se diferencia wait(500)de sleep(500)?

    sleep(500)llamado en un hilo, wait(500)llamado dentro de un bloque sincronizado en el objeto en el que este bloque está sincronizado.
    Cuando se llama, sleep(500)el hilo actual esperará 500 milisegundos y luego continuará su trabajo.
    Cuando se llama, wait(500)el hilo actual liberará el bloqueo del objeto sincronizado y entrará en suspensión durante 500 milisegundos.

  9. ¿A qué estado irá el hilo al llamar al método yield()?

    Cuando se llama a un método yield(), el hilo actual "salta su turno" y Java inmediatamente cambia a ejecutar el siguiente hilo. El hilo va de estado runningen estado ready. Los estados en ejecución y listo son subestados del estado RUNNABLE.

PD Comentarios, adiciones, correcciones, comentarios son bienvenidos =)
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION