in

Preguntas de la entrevista de Java Multithreading (2021)

java multithreading

El subproceso múltiple y la sincronización se consideran el capítulo típico de la programación Java. En las empresas de desarrollo de juegos, la mayoría de las preguntas de entrevistas relacionadas con subprocesos múltiples se hacen. A continuación se proporciona una lista de preguntas frecuentes de entrevistas de concurrencia y multiproceso de Java.


Preguntas de entrevista de subprocesos múltiples

1) ¿Qué es multiproceso?

El subproceso múltiple es un proceso de ejecución de varios subprocesos simultáneamente. El subproceso múltiple se utiliza para obtener la multitarea. Consume menos memoria y ofrece un rendimiento rápido y eficiente. Sus principales ventajas son:

  • Los hilos comparten el mismo espacio de direcciones.
  • El hilo es ligero.
  • El costo de comunicación entre los procesos es bajo.

Más detalles.


2) ¿Qué es el hilo?

Un hilo es un subproceso ligero. Es una ruta de ejecución separada porque cada subproceso se ejecuta en un marco de pila diferente. Un proceso puede contener varios subprocesos. Los subprocesos comparten los recursos del proceso, pero aún así, se ejecutan de forma independiente.

Más detalles.


3) ¿Diferenciar entre proceso e hilo?

Existen las siguientes diferencias entre el proceso y el hilo.

  • Un programa en ejecución se llama proceso mientras que; Un hilo es un subconjunto del proceso
  • Los procesos son independientes, mientras que los subprocesos son el subconjunto de procesos.
  • Los procesos tienen un espacio de direcciones diferente en la memoria, mientras que los subprocesos contienen un espacio de direcciones compartido.
  • El cambio de contexto es más rápido entre los subprocesos en comparación con los procesos.
  • La comunicación entre procesos es más lenta y costosa que la comunicación entre subprocesos.
  • Cualquier cambio en el proceso principal no afecta al proceso secundario, mientras que los cambios en el hilo principal pueden afectar al hilo secundario.

Java multiproceso


4) ¿Qué entiendes por comunicación entre hilos?

  • El proceso de comunicación entre subprocesos sincronizados se denomina comunicación entre subprocesos.
  • La comunicación entre subprocesos se utiliza para evitar el sondeo de subprocesos en Java.
  • El subproceso se detiene en ejecución en su sección crítica, y se permite que otro subproceso ingrese (o bloquee) en la misma sección crítica para ejecutarse.
  • Se puede obtener mediante los métodos wait (), notificar () y notificar a todos ().

5) ¿Cuál es el propósito del método wait () en Java?

El método wait () lo proporciona la clase Object en Java. Este método se utiliza para la comunicación entre subprocesos en Java. El java.lang.Object.wait () se usa para pausar el hilo actual y esperar hasta que otro hilo no llame al método notificar () o notificar a todos (). Su sintaxis se da a continuación.

espera vacía final pública ()


6) ¿Por qué se debe llamar al método wait () desde el bloque sincronizado?

Debemos llamar al método de espera, de lo contrario arrojará java.lang.IllegalMonitorStateException excepción. Además, necesitamos el método wait () para la comunicación entre subprocesos con notificar () y notificar a todos (). Por tanto, debe estar presente en el bloque sincronizado para la correcta y correcta comunicación.


7) ¿Cuáles son las ventajas del multiproceso?

La programación de subprocesos múltiples tiene las siguientes ventajas:

  • El subproceso múltiple permite que una aplicación / programa sea siempre reactivo para la entrada, incluso si ya se está ejecutando con algunas tareas en segundo plano
  • El subproceso múltiple permite la ejecución más rápida de tareas, ya que los subprocesos se ejecutan de forma independiente.
  • El subproceso múltiple proporciona una mejor utilización de la memoria caché, ya que los subprocesos comparten los recursos de memoria comunes.
  • El subproceso múltiple reduce el número de servidores necesarios, ya que un servidor puede ejecutar varios subprocesos a la vez.

8) ¿Cuáles son los estados en el ciclo de vida de un hilo?

Un hilo puede tener uno de los siguientes estados durante su vida:

  1. Nuevo: En este estado, se crea un objeto de clase Thread utilizando un nuevo operador, pero el hilo no está activo. El hilo no comienza hasta que llamamos al método start ().
  2. Ejecutable: En este estado, el hilo está listo para ejecutarse después de llamar al método start (). Sin embargo, el planificador de subprocesos aún no ha seleccionado el subproceso.
  3. Corriendo: En este estado, el programador de subprocesos elige el subproceso del estado listo y el subproceso se está ejecutando.
  4. Esperando / Bloqueado: En este estado, un subproceso no se está ejecutando pero sigue vivo, o está esperando a que termine el otro subproceso.
  5. Muerto / Terminado: Un hilo está en estado terminado o muerto cuando el método run () sale.

Ciclo de vida del hilo de Java


9) ¿Cuál es la diferencia entre programación preventiva y división de tiempo?

En la programación preventiva, la tarea de mayor prioridad se ejecuta hasta que entra en los estados de espera o inactiva, o hasta que surge una tarea de mayor prioridad. En la división de tiempo, una tarea se ejecuta durante un período de tiempo predefinido y luego vuelve a entrar en el grupo de tareas listas. Luego, el programador determina qué tarea debe ejecutarse a continuación, en función de la prioridad y otros factores.


10) ¿Qué es el cambio de contexto?

En contexto, el cambio de estado del proceso (o subproceso) se almacena para que se pueda restaurar y la ejecución se pueda reanudar desde el mismo punto más adelante. El cambio de contexto permite que los múltiples procesos compartan la misma CPU.


11) ¿Diferenciar entre la clase Thread y la interfaz Runnable para crear un Thread?

El hilo se puede crear de dos formas.

  • Extendiendo la clase Thread
  • Implementando la interfaz Runnable

Sin embargo, las principales diferencias entre ambas formas se dan a continuación:

  • Al extender la clase Thread, no podemos extender ninguna otra clase, ya que Java no permite herencias múltiples mientras implementa la interfaz Runnable; también podemos ampliar otra clase base (si es necesario).
  • Al extender la clase Thread, cada hilo crea el objeto único y se asocia con él mientras implementa la interfaz Runnable; varios subprocesos comparten el mismo objeto
  • La clase Thread proporciona varios métodos incorporados como getPriority (), isAlive y muchos más, mientras que la interfaz Runnable proporciona un método único, es decir, run ().

12) ¿Qué significa el método join ()?

El método join () espera a que muera un hilo. En otras palabras, hace que los subprocesos en ejecución dejen de ejecutarse hasta que el subproceso con el que se une complete su tarea. El método Join está sobrecargado en la clase Thread de las siguientes formas.

  • public void join () lanza InterruptedException
  • La combinación de vacío público (milisegundos largos) arroja una excepción InterruptedException

Más detalles.


13) Describe el propósito y funcionamiento del método sleep ().

El método sleep () en Java se usa para bloquear un hilo durante un tiempo en particular, lo que significa que pausa la ejecución de un hilo durante un tiempo específico. Hay dos métodos para hacerlo.

Sintaxis:

  • El sueño vacío estático público (milisegundos largos) lanza InterruptedException
  • el sueño vacío estático público (milisegundos largos, nanos int) lanza InterruptedException

Método de trabajo del sueño ()

Cuando llamamos al método sleep (), pausa la ejecución del hilo actual durante el tiempo dado y le da prioridad a otro hilo (si está disponible). Además, cuando se completa el tiempo de espera, nuevamente el hilo anterior cambia su estado de espera a ejecutable y entra en estado de ejecución, y todo el proceso funciona hasta que la ejecución no se completa.


14) ¿Cuál es la diferencia entre el método wait () y sleep ()?

Espere() dormir()
1) El método wait () se define en la clase Object. El método sleep () se define en la clase Thread.
2) El método wait () libera el bloqueo. El método sleep () no libera el bloqueo.

15) ¿Es posible iniciar un hilo dos veces?

No, no podemos reiniciar el hilo, ya que una vez que un hilo se inicia y se ejecuta, pasa al estado Muerto. Por lo tanto, si intentamos iniciar un hilo dos veces, dará un runtimeException «java.lang.IllegalThreadStateException». Considere el siguiente ejemplo.

La clase pública Multithread1 extiende Thread {public void run () {try {System.out.println («el hilo se está ejecutando ahora ……..»); } catch (Exception e) {}} public static void main (String[] args) {Multithread1 m1 = new Multithread1 (); m1.start (); m1.start (); }}

Producción

thread is executing now........
Exception in thread "main" java.lang.IllegalThreadStateException
	at java.lang.Thread.start(Thread.java:708)
	at Multithread1.main(Multithread1.java:13)

Más detalles.


16) ¿Podemos llamar al método run () en lugar de start ()?

Sí, llamar al método run () directamente es válido, pero no funcionará como un hilo, sino que funcionará como un objeto normal. No habrá cambio de contexto entre los hilos. Cuando llamamos al método start (), este llama internamente al método run (), que crea una nueva pila para un hilo mientras que llamar directamente a run () no creará una nueva pila.

Más detalles.


17) ¿Qué pasa con los hilos del demonio?

Los subprocesos del demonio son los subprocesos de baja prioridad que proporcionan el soporte y los servicios en segundo plano a los subprocesos del usuario. La JVM termina automáticamente el subproceso del demonio si el programa permanece solo con el subproceso del demonio y todos los demás subprocesos del usuario finalizan / mueren. Hay dos métodos para el hilo de demonio disponibles en la clase Thread:

  • public void setDaemon (estado booleano): Solía ​​marcar el hilo del demonio de hilo o un hilo de usuario.
  • isDaemon () booleano público: Comprueba si el hilo es demonio o no.

Más detalles.


18) ¿Podemos hacer que el hilo del usuario sea un hilo demonio si se inicia el hilo?

No, si lo hace, arrojará IllegalThreadStateException. Por lo tanto, solo podemos crear un subproceso de demonio antes de iniciar el subproceso.

class Testdaemon1 extiende Thread {public void run () {System.out.println («El hilo en ejecución es un demonio …»); } public static void main (String[] args) {Testdaemon1 td = new Testdaemon1 (); td.start (); setDaemon (true); // Lanzará la excepción: td. }}

Producción

Running thread is daemon...
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1359)
at Testdaemon1.main(Testdaemon1.java:8)

Más detalles.


19) ¿Qué es el gancho de cierre?

El gancho de cierre es un subproceso que se invoca implícitamente antes de que se cierre la JVM. Entonces, podemos usarlo para limpiar el recurso o guardar el estado cuando la JVM se apaga de manera normal o abrupta. Podemos agregar un gancho de apagado usando el siguiente método:

publicvoid addShutdownHook (Thread hook) {} Runtime r = Runtime.getRuntime (); r.addShutdownHook (nuevo MyThread ());

Algunos puntos importantes sobre los ganchos de cierre son:

  • Los enganches de cierre se inicializaron pero solo se pueden iniciar cuando se produjo el cierre de la JVM.
  • Los hooks de apagado son más confiables que el finalizador () porque hay muy pocas posibilidades de que no se ejecuten los hooks de apagado.
  • El gancho de cierre se puede detener llamando al método halt (int) de la clase Runtime.

Más detalles.


20) ¿Cuándo debemos interrumpir un hilo?

Debemos interrumpir un hilo cuando queremos romper el estado de espera o suspensión de un hilo. Podemos interrumpir un hilo llamando a interrupt () lanzando la InterruptedException.

Más detalles.


21) ¿Qué es la sincronización?

La sincronización es la capacidad de controlar el acceso de múltiples subprocesos a cualquier recurso compartido. Esta usado:


  1. Para evitar la interferencia del hilo.
  2. Para evitar problemas de consistencia.

Cuando varios subprocesos intentan hacer la misma tarea, existe la posibilidad de un resultado erróneo, por lo tanto, para eliminar este problema, Java utiliza el proceso de sincronización que permite que solo se ejecute un subproceso a la vez. La sincronización se puede lograr de tres formas:

  • por el método sincronizado
  • por bloque sincronizado
  • por sincronización estática

Sintaxis para bloque sincronizado

sincronizado (expresión de referencia de objeto) {// bloque de código}

Más detalles.


22) ¿Cuál es el propósito del bloque sincronizado?

El bloque Sincronizado se puede utilizar para realizar la sincronización en cualquier recurso específico del método. Solo un subproceso a la vez puede ejecutarse en un recurso en particular, y todos los demás subprocesos que intentan ingresar al bloque sincronizado son …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Listas de Python

JSON con Java