¿Por qué no podemos llamar al método de inicio dos veces en una misma instancia del objeto Thread?

Estaba leyendo sobre hilos y descubrí que no podemos llamar al método de inicio dos veces en la misma instancia de hilo. Pero no entendí la razón exacta de lo mismo. Entonces, ¿por qué no podemos llamarlo dos o más veces?

En mi opinión, el objeto Thread es su “mango” para el contexto de ejecución real. Si permite crear muchas ejecuciones simultáneas asociadas con el mismo java.lang.Thread, ¿qué esperaría que devolvieran los métodos getStackTrace () y getState ()?

Supongo que la clase Thread podría haber sido diseñada para permitir el desarrollo de múltiples contextos en ejecución, pero su API sería menos simple y limpia.

Desea 1 instancia para 1 hilo, ya que ese hilo tiene un estado interno que gestionará.

Considere los hilos como un tipo de recurso. Por lo general, no tiene sentido que una instancia se refiera a varios recursos (al igual que no es posible que un archivo Java se refiera a más de un archivo).

También le causaría todo tipo de problemas si iniciara un hilo dos veces, y o bien heredó de Thread y creó algunas variables de instancia que ahora tienen acceso a más de 1 hilo, lo mismo si crea el hilo desde un Runnable . Al menos la API no lo convierte en una obviedad para hacer ese error.

Eche un vistazo a los estados en los que puede estar un hilo, aquí http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.State.html

Básicamente, la única vez que puede iniciar un hilo es cuando está en el estado NEW . Y ninguno de los otros estados puede hacer la transición de regreso a NEW

de acuerdo con el ciclo de vida del hilo, una vez que el hilo está ‘muerto’ no puedes reiniciarlo. Solo puedes iniciar el nuevo método invocando el hilo del método start ().

El subproceso se puede comprar al estado en ejecución desde el estado ejecutable no desde el estado muerto .

Un Thread no es lo mismo que un hilo.

Un hilo (little-t) es una ejecución independiente de su código. Un Thread (Big-T) es un objeto Java que se puede utilizar para iniciar y administrar el ciclo de vida de un subproceso pequeño.

Supongamos que fue contratado para escribir el código de una compañía de seguros y definió una clase de Accident (Big-A) para representar un accidente (little-a). Alguien le pregunta: “¿Por qué no puedo reutilizar una instancia de Accident ?”

Bueno, un accidente solo puede ocurrir una vez, ¿verdad? Incluso si lo mismo sucede exactamente con los mismos conductores y autos de la misma manera en un día diferente, sigue siendo un accidente diferente, ¿verdad?

Esta es mi opinión, es debido a la identificación del hilo. El planificador de subprocesos identifica el subproceso a través de la Id. De subproceso. Es un número real único. Por favor encuentre el código a continuación,

  public class StartTwice extends Thread { public void run() { System.out.println("running..."); } public static void main(String[] args) { StartTwice start1 = new StartTwice(); System.out.println("Thread id: " + start1.getId()); start1.start(); start1 = new StartTwice(); System.out.println("Thread id: " + start1.getId()); start1.start(); } } Output is: Thread id: 10 Thread id: 11 running... running... 

Cuando vuelvo a crear una instancia del objeto start1. Se crea una nueva identificación de subproceso.

PD: Incluso un hilo está listo, no podemos usar el mismo objeto (ID de hilo) por segunda vez. Hasta o a menos que la JVM reutilice ese id.