2011-11-18 19 views
5

Quiero saber en Java:En Java, si un hilo se mata, ¿qué pasará con el otro hilo?

  1. Si hilo principal se mató lo que va a pasar a otros temas infantiles?
  2. Si se eliminó el hilo hijo, ¿qué pasará con los hermanos y el hilo padre?

He leído en el siguiente enlace que, dado que los hilos comparten espacio de direcciones, matar un hilo también puede afectar a otros hilos.

Debajo está una cita de here.

Los subprocesos son procesos ligeros que dividen el flujo principal de control en múltiples flujos y cada flujo de control/hilo se ejecutará de forma independiente. La actividad del proceso en un sistema está representada por hilos. El proceso que tiene múltiples hilos se llama multihilo. Cada hilo tiene su propio ID de hilo (Tipo de datos entero), registro, contador de programa, pila, error no. Los hilos pueden comunicarse utilizando la memoria compartida dentro del mismo proceso. Existen diferentes ventajas de usar subprocesos para gestionar y mantener la subtarea de las aplicaciones. Cuando estamos utilizando subprocesos, menos recursos del sistema se utilizan para el cambio de contexto y aumenta el rendimiento de la aplicación. Los hilos también simplifican la estructura del programa. No hay un mecanismo especial para la comunicación entre tareas. Los subprocesos también tienen algunas desventajas, por ejemplo, los subprocesos no son reutilizables, ya que dependen de un proceso y no se pueden separar del proceso. Los hilos no están aislados ya que no tienen su propio espacio de direcciones. El error causado por el hilo puede matar a todo el proceso o programa porque ese error afecta a todo el espacio de memoria de todos los hilos utilizados en ese proceso o programa. Debido a los recursos compartidos por los hilos con en el proceso también puede afectar a todo el proceso o programa cuando un recurso daña por el hilo. Para el acceso simultáneo de lectura y escritura al hilo de memoria se requieren sincronizaciones. Los datos del proceso pueden dañarse fácilmente por el hilo a través de la carrera de datos, ya que todos los hilos del proceso tienen acceso de escritura a la misma información.

puede u gys informe a si lo dicho en el enlace anterior es aplicable a java

Respuesta

10

1) Nada va a pasar con los niños "hilos" ...

2) no pasará nada a los "hilos hermanos" ...

... con la siguiente excepción: Si todos los hilos restantes son hilos daemon, la aplicación terminará (es decir, cuando solo queden hilos daemon, estos también serán eliminados) .

Desde el documentation of Thread:

[...] La Máquina Virtual de Java continúa ejecutando las discusiones hasta que cualquiera de las siguientes situaciones:

  • El método de salida de tiempo de ejecución de clase ha sido llamado [ ...]
  • Todos los hilos que no son hilos daemon han muerto, volviendo de la llamada al método de ejecución o lanzando una excepción que se propaga más allá del método de ejecución.
+0

gracias por la respuesta rápida. Tengo una duda más con respecto al punto 2. Leí en el siguiente enlace que, dado que los hilos comparten espacio de direcciones, matar un hilo también puede afectar a otro hilo. En espera de su respuesta http://www.blurtit.com/q236205.html – nantitv

+1

A) La diatriba está completamente equivocada al decir "* Los hilos también simplifican la estructura del programa *", y nada de lo que dice después puede reparar ese miserable frase. B) No creo que se aplique a Java. C) No mate los hilos explícitamente (usando Thread.stop). El método Thread.stop está en desuso por muy buenas razones. – aioobe

+0

The Thread ayuda a un programa a administrar diferentes tareas al mismo tiempo. El método Thread.stop() está en desuso porque no es seguro (piense si el hilo está administrando algunos datos importantes). Es mejor detenerlo con una condición booleana en un ciclo while en el método run(). –

0

Nada, en ambos casos. Los hilos se ejecutan de forma independiente el uno del otro y no hay hilos "padres" o "secundarios" en este sentido. El proceso continuará ejecutándose hasta que no haya subprocesos ejecutándose en él.

Un proceso es simplemente un contenedor que contiene algunos hilos. Los hilos ejecutan código. Si hay un hilo o más ejecutándose dentro de un contenedor de proceso, el proceso continuará existiendo. No hay una relación simbiótica entre los hilos, matar a uno no matará a otro.

Cuestiones relacionadas