Anteriormente he compartido más de 100 preguntas de la entrevista del núcleo de java basadas en varios temas del núcleo de java. En este artículo voy a compartir preguntas de entrevista basadas en multihilo y concurrencia solamente. En casi todas las entrevistas se plantearán preguntas multihilo, ya que es uno de los temas más frecuentes en las entrevistas para profesionales de java.
Si eres nuevo en este tema, te recomiendo que consultes este tutorial (java multithreading) antes de repasar el siguiente conjunto de preguntas y respuestas de la entrevista.
P) ¿Qué es un hilo de rosca en Java?
R) Un hilo es una unidad de ejecución concurrente. O en otras palabras, se puede decir que es una parte de un proceso que se puede ejecutar de forma concurrente con otras partes del proceso.
P) ¿Quées Multithreading?
R) El proceso de ejecutar múltiples hilos simultáneamente se conoce como multihilo. Java soporta multihilo. La principal ventaja de la multihilo es reducir el tiempo de inactividad de la CPU y mejorar la utilización de la CPU. Esto hace que el trabajo se complete en menos tiempo.
P) ¿Cuál es la diferencia entre hilo y proceso?
R) Consulte este artículo: Hilo vs. Proceso
P) ¿Cuáles son las dos formas de crear un hilo?
R) Podemos crear un hilo usando cualquiera de los dos métodos siguientes.
1) Implementando una interfaz ejecutable
2) Extendiendo la clase de Hilo
P) ¿Qué es un hilo de Daemon?
A) Remitirse a este artículo: Hilo de Demonio en Java
P) ¿Cómo se hace un hilo (hilo de usuario) al hilo de Daemon?
R) Llamando al método setDaemon() podemos hacer un hilo de usuario al hilo del demonio.
Sintaxis:
thread.setDaemon(true);
P) ¿Cuál es la diferencia entre el hilo de usuario y el hilo de Daemon?
R) Por defecto, un hilo creado en un programa es siempre un hilo de usuario, sin embargo podemos convertirlo en un demonio llamando al método setDaemon(true), si es necesario. Un hilo de dæmon se ejecuta en segundo plano y no impide que la JVM se apague. Una vez que todo el hilo de usuario se completa, la JVM se apaga sin que nos moleste si un hilo del demonio se está ejecutando o no.
P) ¿Podemos cambiar un hilo de usuario a un hilo de demonio llamando al método setDaemon() si el hilo ya ha sido iniciado?
No, si el hilo se ha iniciado no podemos convertirlo en demonio porque entonces lanzaría una IllegalThreadStateException
P) ¿Podemos llamar al método run() de la clase Thread?
R) Podemos llamar al método run() si queremos, pero entonces se comportaría como un método normal y no podríamos aprovechar las ventajas del multihilo. En general, los métodos run() inician la ejecución cuando llamamos al método start() de una clase Thread. Para más detalles sobre esto: Consulte este artículo.
P) ¿Qué es el bloqueo?
R) Un punto muerto es una condición en la que dos o más hilos están en espera de que el otro libere los recursos que necesita. Por ejemplo, el Hilo A tiene un recurso X y necesita el recurso Y, mientras que el Hilo B tiene un recurso Y y necesita X, en este caso ambos hilos están esperando el uno al otro para liberar el recurso y están en condición de bloqueo.
P) ¿Qué es la sincronización?
R) Es una técnica de concesión de acceso a los recursos compartidos en un entorno multihilo para evitar inconsistencias en los resultados.
P) ¿Cuál es la diferencia entre notify() y notifyAll()?
R) notify() despierta el primer hilo que se llama wait() en el mismo objeto, mientras que el método notifyAll() despierta todos los hilos en espera.
P) ¿Qué hace el método join()?
R) El método join() se utiliza para retener la ejecución del hilo que se está ejecutando actualmente hasta que el hilo especificado esté muerto(ejecución terminada).
Lee más sobre join() aquí.
P) ¿Se puede iniciar un hilo dos veces en Java?
No, una vez que se inicia un hilo, no se puede volver a iniciar. Si lo haces, se producirá una excepción ilegal de estado de los hilos. Por ejemplo: Remitirse a este artículo.