Las 20 mejores preguntas y respuestas de la entrevista de subprocesos múltiples de Java

Java ha sido calificado como el número uno en los desarrolladores de programación populares de TIOBE que utilizan más de 10 millones de desarrolladores en más de 15 mil millones de dispositivos compatibles con Java. Se utiliza para crear aplicaciones para tecnologías de tendencia como Big Data para dispositivos domésticos como móviles y DTH Boxes, se utiliza en todas partes en la era de la información actual. 

Top-20-Java-Multithreading-Interview-Questions-Answers

Multithreading en Core Java (J2SE) es un tema muy importante desde el punto de vista de una entrevista. Puede llevarlo a convertirse en un desarrollador de Java, un ingeniero de pruebas de Java, un arquitecto de Java, un analista principal, un consultor de Java y, lo que es más importante, un buen programador de Java que le permite sumergirse en la programación J2EE que significa Java para la edición empresarial o en lenguaje sencillo. haciéndolo apto para trabajar directamente en el flujo de trabajo del dominio corporativo. Las ventajas varían ampliamente en la India para los desarrolladores de Java de 300K a 25000K para los más nuevos según el nivel de intelecto.

Entonces, comencemos con la mayoría de las preguntas de la entrevista de subprocesos múltiples de Java con sus respuestas detalladas.

Q-1 ¿Qué es la multitarea?

Un sistema operativo multitarea es un sistema operativo que le da la percepción de 2 o más tareas/trabajos/procesos ejecutándose al mismo tiempo. Lo hace dividiendo los recursos del sistema entre estas tareas/trabajos/procesos y cambiando entre las tareas/trabajos/procesos mientras se ejecutan una y otra vez. Por lo general, la CPU procesa solo una tarea a la vez, pero el cambio es tan rápido que parece que la CPU está ejecutando varios procesos a la vez. Pueden admitir la multitarea preventiva, en la que el sistema operativo proporciona tiempo a las aplicaciones (prácticamente todos los sistemas operativos modernos), o la multitarea cooperativa, en la que el sistema operativo espera a que el programa le devuelva el control (Windows 3.x, Mac OS 9 y versiones anteriores). lo que lleva a bloqueos y bloqueos. También conocido como tiempo compartido, la multitarea es una extensión lógica de la multiprogramación.

La programación multitarea es de dos tipos, que son los siguientes:

  1. Multitarea basada en procesos
  2. Multitarea basada en subprocesos

Nota: La realización de varias tareas a la vez se conoce como subprocesamiento múltiple en Java, que es de dos tipos: subprocesos múltiples basados ​​en procesos y subprocesos múltiples basados ​​en subprocesos.

P-2 ¿Cómo puede identificar el proceso?

Cualquier programa que está en un estado de trabajo se denomina proceso. Estos procesos tienen subprocesos que son unidades individuales despachables.

Q-3 ¿Cómo ves un hilo?

Para ver el estado de los subprocesos, tomemos Windows como un sistema operativo, ilustra que tendríamos ProcessExplorer donde puede ver la GUI que se muestra a continuación para los sistemas operativos Windows.

This PC > OS > Users > GeeksforGeeks > Downloads > ProcessExplorer

ProcessExplorer se ilustra a continuación en los sistemas operativos Windows

Nota: Todos ellos, como se enumeran en los medios anteriores, son los procesos que se muestran arriba, donde a la vez muchos se ejecutan en paralelo entre sí, de ahora en adelante ilustran el multiprocesamiento en el sistema operativo Jwindows.  

Como hemos visto, los subprocesos residen en un solo proceso, por lo que debemos profundizar en un proceso específico para verlos y mostrar a los usuarios cómo funcionan los subprocesos múltiples en las computadoras en el back-end. Por ejemplo: escojamos un proceso aleatorio de los medios anteriores que consta de varios procesos, por ejemplo, ‘chrome’. Ahora debemos hacer clic derecho sobre el proceso y hacer clic en el menú de propiedades.

De los medios anteriores, se percibe claramente que Chrome es un proceso y después de continuar con los pasos para descubrir los subprocesos que se ejecutan dentro del proceso de Chrome, vamos a las propiedades del proceso ‘chrome’ a continuación. Se generará una salida pictórica que representa los subprocesos que se ejecutan en el procesar cromo.

Nota: si nos desplazamos de arriba hacia abajo, veremos algunos colores en algunos de esos hilos. Aquí, los subprocesos de color verde se asocian como los subprocesos recién creados y los subprocesos asociados de color rojo representan los subprocesos cerrados.

Nota: Para que Chrome aumente el rendimiento al reducir el tiempo de respuesta, lo que se conoce como multitarea basada en subprocesos.

P-4 ¿Qué es multihilo y en qué se diferencia de multitarea?

Multithreading es una forma especializada de multitarea. La multitarea basada en procesos se refiere a la ejecución de varias tareas simultáneamente, donde cada tarea es un proceso independiente separado. La multitarea basada en procesos. 

Ejemplo: ejecutar Java IDE y TextEdit al mismo tiempo. La multitarea basada en procesos está representada por la siguiente imagen, que es la siguiente:

La multitarea basada en subprocesos se refiere a la ejecución de varias tareas simultáneamente, donde cada tarea es una parte independiente separada del mismo programa conocido como subproceso. Por ejemplo, JUnits usa subprocesos para ejecutar casos de prueba en paralelo. De ahora en adelante, la multitarea basada en procesos es un proceso de manejo de escenarios más grande donde los hilos manejan los detalles. Ya se discutió a mayor profundidad ya con ayudas visuales.

Para obtener más detalles, consulte Multitarea basada en procesos y basada en subprocesos en Java 

P-5 ¿Qué tipo de multitarea es mejor y por qué?

La multitarea basada en subprocesos es mejor ya que la multitarea de subprocesos requiere menos gastos generales en comparación con la multitarea de procesos porque los procesos son pesados ​​y, a su vez, requieren su propio espacio de direcciones separado en la memoria, mientras que los subprocesos son procesos muy livianos y comparten el mismo espacio de direcciones que comparten cooperativamente por procesos pesados.

El cambio es una razón secundaria ya que la comunicación entre procesos es costosa y limitada. El cambio de contexto de un proceso a otro es costoso, mientras que la comunicación entre subprocesos es económica y el cambio de contexto de un subproceso a otro tiene un costo menor. 

Nota: Sin embargo, los programas de Java hacen uso de entornos multitarea basados ​​en procesos, pero esta característica no está directamente bajo el control directo de Java mientras se completa el subprocesamiento múltiple.

Q-6 ¿Qué es un hilo?

Los subprocesos son procesos ligeros dentro de los procesos como se ve. En Java, hay dos formas de crear hilos, a saber, a través de la clase Thread y a través de la interfaz Runnable.

Para leer más sobre esto, consulte Clase de hilo en Java , Interfaz ejecutable en Java 

P-7 ¿Cuáles son los diferentes estados de un subproceso o cuál es el ciclo de vida del subproceso?

Un subproceso en Java en cualquier momento existe en cualquiera de los siguientes estados. Un hilo se encuentra solo en uno de los estados mostrados en cualquier instante:

  1. Nuevo
  2. Ejecutable
  3. Obstruido
  4. Esperando
  5. Espera cronometrada
  6. Terminado

Para leer más sobre esto, consulte Ciclo de vida y estados de un subproceso en Java  

Q-8 ¿Cuál es la tarea del hilo principal?

Todos los programas de Java tienen al menos un subproceso, conocido como el subproceso principal que crea JVM al inicio del programa cuando se invoca el método main() con el subproceso principal como se muestra en la salida percibida de la ilustración del pseudocódigo.

Ilustración:

System.out.println(“Mayank Solanki”);
Output: Mayank Solanki
System.out.println(Thread.getname().currentthread()); 
Output: main

P-9 ¿Cuáles son los diferentes tipos de subprocesos en Java? 

Hay dos tipos de subprocesos en Java de la siguiente manera:

  • Hilo de usuario
  • Hilo de demonio

Los hilos de usuario son creados por desarrolladores de Java, por ejemplo, el hilo principal. Todos los subprocesos que se crean dentro del método main() son, por defecto, subprocesos que no son demonios porque el subproceso ‘principal’ no es un demonio. El subproceso daemon es un subproceso de baja prioridad que se ejecuta en segundo plano para realizar tareas como la recolección de elementos no utilizados, etc. No impiden que los subprocesos daemon salgan cuando todos los subprocesos de usuario finalizan su ejecución. JVM finaliza cuando todos los subprocesos que no son demonios finalizan su ejecución. A JVM no le importa si un subproceso se está ejecutando o no, si JVM encuentra un subproceso de daemon en ejecución, finaliza el subproceso y luego se apaga.

P-10 ¿Cómo crear un hilo de usuario?

Como se discutió anteriormente, cuando la JVM se inicia, crea un subproceso principal sobre el cual se ejecuta el programa, a menos que el usuario no cree un subproceso adicional. Lo primero que busca el subproceso «Principal» es el método ‘ public static void main(String [] args) ‘ para invocarlo, ya que actúa como un punto de entrada al programa. Todos los demás subprocesos creados en actos principales como subprocesos secundarios del subproceso «Principal». 

El subproceso de usuario se puede implementar de dos maneras que se enumeran a continuación:

  1. Uso de la clase Thread al extender la clase java.lang.Thread .
  2. Usar la interfaz ejecutable al implementarla.

P-11 ¿Cómo establecer el nombre del hilo?

Podemos nombrar un hilo usando un método que ya se conoce como setName()reemplazando el nombre predeterminado que era ‘Thread-0’, ‘Thread-1’, y así sucesivamente.

thread_class_object.setName("Name_thread_here");

P-12 ¿Qué es la prioridad de subprocesos?

Prioridades en subprocesos es un concepto en el que cada subproceso tiene una prioridad que, en lenguaje sencillo, se puede decir que cada objeto tiene prioridad aquí, que se representa mediante números que van del 1 al 10. 

  • La prioridad predeterminada se establece en 5 como excepción.
  • La prioridad mínima se establece en 0.
  • La prioridad máxima se establece en 10.

Aquí se definen 3 constantes, a saber, de la siguiente manera:

  1. public static int NORM_PRIORITY
  2. public static int MIN_PRIORITY
  3. public static int MAX_PRIORITY

Para leer más sobre esto, consulte Prioridad de subprocesos en subprocesos múltiples en Java 

P-13 ¿Cómo interbloqueo juega un papel importante en subprocesos múltiples?

Si incorporamos subprocesos en los sistemas operativos, se puede percibir que los algoritmos de programación de procesos en los sistemas operativos están trabajando en profundidad en el mismo concepto que incorpora el subproceso en los diagramas de Gantt . A continuación se enumeran algunos de los más populares, que los resumen a todos y se utilizan prácticamente en el desarrollo de software.

  • Primero en entrar primero en salir
  • Último en entrar primero en salir
  • Programación por turnos

Ahora uno Imagine el concepto de Deadlock en sistemas operativos con subprocesos ahora cómo se calcula internamente el cambio si solo tiene una descripción general de ellos. 

P-14 ¿Por qué no se ordena la salida? 

La programación de subprocesos implica la programación de dos límites,

  • Programación de subprocesos de nivel de usuario (ULT) a subprocesos de nivel de kernel (KLT) a través de un proceso ligero (LWP) por parte del desarrollador de la aplicación.
  • Programación de subprocesos a nivel de kernel por parte del programador del sistema para realizar diferentes funciones únicas del sistema operativo.

Si varios subprocesos están esperando para ejecutarse, la ejecución del subproceso la decide «ThreadScheduler», que es parte de JVM, por lo tanto, depende del proveedor, lo que resulta en una ejecución inesperada de la orden de salida.

Nota: 

  • En multithreading, la garantía de orden es mucho menor donde podemos predecir posibles salidas pero no exactamente una.
  • Además, tenga en cuenta que la sincronización cuando se incorpora con subprocesos múltiples afecta nuestra salida deseada simplemente usando la palabra clave ‘sincronizado’.

Es como se ilustra en la siguiente ilustración, que es la siguiente:

Q-15 ¿Qué es Daemon Thread en Java y explicar sus propiedades? 

El subproceso Daemon es un subproceso de baja prioridad que se ejecuta en segundo plano para realizar tareas como la recolección de elementos no utilizados. Posee ciertas propiedades específicas que se enumeran a continuación:

  • No pueden evitar que la JVM salga cuando todos los subprocesos de usuario finalizan su ejecución.
  • JVM termina cuando todos los subprocesos de usuario finalizan su ejecución
  • Si JVM encuentra un subproceso de daemon en ejecución, finaliza el subproceso y luego se apaga. A JVM no le importa si el subproceso Daemon se está ejecutando o no.
  • Es un hilo de máxima prioridad baja.

Nota: La principal diferencia entre el subproceso de usuario y el subproceso de daemon es que JVM no espera al subproceso de daemon antes de salir, mientras que espera el subproceso de usuario.

Para leer más sobre esto, consulte Daemon Thread en Java 

P-16 ¿Cómo convertir un subproceso de usuario en un subproceso de daemon?

Se lleva a cabo con la ayuda de dos métodos enumerados en ‘Thread class’ conocidos como setDaemon() e isDaemon() . Primero, el método setDaemon() convierte el hilo de usuario en hilo de daemon y viceversa. Este método solo se puede llamar antes de iniciar el subproceso usando el método start(); de lo contrario, se llama después de iniciar el subproceso con arrojará IllegalThreadStateException. Después de esto, se usa el método isDaemon() que devuelve un valor booleano verdadero si el subproceso es demonio; es un subproceso no daemon.  

P-17 ¿Cuáles son las tareas del método start()?

La tarea principal del método start() es registrar el subproceso con el programador de subprocesos, de modo que uno pueda saber qué subproceso secundario debe realizar, cuándo y cómo se programará y lo manejará el programador de subprocesos . La tarea secundaria es llamar al método run() correspondiente para obtener los subprocesos.

P-18 ¿Cuál es la diferencia entre el método start() y run()?

Primero , ambos métodos se operan en general sobre el hilo. Entonces, si usamos threadT1.start(), este método buscará el método run() para crear un nuevo hilo. Mientras que en el caso del método theadT1.run() se ejecutará probablemente el método normal por el subproceso «Principal» sin la creación de ningún nuevo subproceso.

Nota: si reemplazamos el método start() con el método run(), entonces el hilo ‘principal’ lleva el programa completo.

P-19 ¿Podemos sobrecargar el método run()? ¿Qué pasa si no anulamos el método run()? 

Sí, es posible sobrecargar run() pasándole parámetros y también manteniendo un control para comentar @override desde el método run(). 

Debería ser tan bueno como un subproceso en el que no tenemos ningún argumento, por lo que la práctica de sobrecargar es comentar la llamada al método run() sobrecargado. Ahora, debemos reconocer lo mismo si la salida es la misma o no si no la hemos sobrecargado. 

Si hemos sobrecargado el método run(), observaremos que la salida siempre es el método principal, como se puede percibir en la llamada a la pila de la imagen de arriba. Es porque si depuramos el código como se proporciona en el enlace a continuación, vemos que tan pronto como se vuelve a llamar al método start(), se llama a run() porque no hemos anulado el método run(). 

Para obtener más información, consulte la parte de implementación de cómo se sobrecarga el método run()

Conclusión: podemos sobrecargar el método run() pero el método start() no llamará a ningún argumento run() solamente. Por lo tanto, no nos será de ayuda y se considera una mala práctica. 

El compilador simplemente ejecutará el método run() de la clase Thread, comprobando que el método run() de la clase Thread debe tener una implementación vacía. Por lo tanto, no da como resultado ninguna salida correspondiente al subproceso. Como ya hemos discutido anteriormente, si intentamos hacerlo, entonces se llamará al método de ejecución() de la clase Thread y nunca obtendremos el resultado deseado.

Nota: Geek inicialmente estamos solicitando crear un hilo para nosotros y luego el mismo hilo no hace nada por nosotros que hemos creado. Por lo tanto, deja de tener sentido para nosotros al escribir operaciones no deseadas en nuestros fragmentos de código. Por lo tanto, se vuelve inútil no anular el método run(). 

P-20 ¿Podemos anular el método start()?

Incluso si anulamos el método start() en la clase personalizada, la clase Thread no llevará a cabo ninguna inicialización por nosotros. El método run() tampoco se llama e incluso no se crea un nuevo hilo.

Nota: No podemos reiniciar el mismo hilo nuevamente ya que obtendremos IllegalThreadStateException del paquete java.lang. Además, no podemos hacer esto indirectamente con el uso del método ‘super.start()’.

Publicación traducida automáticamente

Artículo escrito por solankimayank y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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