Cuando termina un hilo, no puede ejecutarlo una vez más, utilizando el método start(): arroja una excepción. ¿Alguien podría explicar, por qué? ¿Qué hay detrás de tal decisión arquitectónica?El hilo se ejecuta solo una vez
Respuesta
Porque la forma de tener código ejecutado en un subproceso diferente no es crear un subproceso, que está vinculado a la vista del sistema de lo que es un subproceso (hay infinitos detalles sobre la distinción entre verde y subprocesos del sistema), sino para crear a Runnable, y que se ejecute mediante un subproceso.
Para un código óptimo (ya que la creación de subprocesos consume mucho tiempo), incluso recomendaría que no ejecute Runnable directamente por un hilo, sino por un ExecutorService, que le permitirá usar un grupo de subprocesos sin molestando por todos esos detalles.
En última instancia, el hilo vive, y luego muere. Después de todo, el objeto Thread
es solo un proxy del subproceso real del sistema operativo debajo. Si quieres otro igual, crea una nueva instancia. ¡No trates de resucitar a los muertos vivientes!
Lo que sería aún peor en un sentido arquitectónico es si el hilo nunca terminó, y usted tuvo que matarlo arbitrariamente para evitar que se ejecute.
Coloque un bucle dentro de su método run() si desea ejecutar una rutina más de una vez. Puede usar un método de devolución de llamada para enviar datos/señales a la cadena de llamada y reaccionar cuando ocurran.
No quiero saber cómo solucionar esto, solo quiero saber por qué. – folone
Cuando se termina un hilo, no se puede carrera una vez más, el uso de inicio() método:
Corrección: puede llamar a Thread.start()
sólo una vez por ejemplo, cualquier llamada posterior arrojará una excepción, no importa si el hilo aún se está ejecutando o no.
Permitir un "reinicio" después de que haya terminado de ejecutarse (claramente es un error mientras el hilo todavía está ejecutándose) requeriría lógica adicional, y evitaría que el tiempo de ejecución liberara recursos como la pila de hilos (que es una cantidad significativa de memoria) hasta que la instancia sea basura recolectada; tal como es ahora, se pueden liberar tan pronto como termine el hilo.
aplicación simple para crear los múltiples hilos:
import java.io.*;
class PWD extends Thread {
public void run() {
System.out.println(System.getProperty("user.dir"));
return;
}
}
public class HelloMultithread extends Thread{
public static void main(String[] args) throws java.io.IOException {
for(int i = 0; i < 10; i++){
PWD p = new PWD();
p.start();
}
}
}
Como newbee, ayudó a este enlace:
http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
- 1. ¿Por qué se ejecuta run() solo una vez?
- 2. AutoMapper: ¿Por qué UseValue solo se ejecuta una vez
- 3. ¡Solo un hilo a la vez!
- 4. ¿Alguna vez el controlador se ejecuta más de una vez en Jmeter?
- 5. ¿Por qué una tarea de Rake en un ciclo se ejecuta solo una vez?
- 6. UIWebView shouldStartLoadWithRequest solo se llamó una vez?
- 7. System.Threading.Timer solo se dispara una vez
- 8. ISupportIncrementalLoading solo se dispara una vez
- 9. ¿Por qué solo se agrega una vez?
- 10. ¿Iframe se ejecuta en el mismo hilo que el propietario?
- 11. ¿Cómo solo ejecutar pruebas unitarias una vez cuando se ejecuta "maven clean install" y Sonar?
- 12. ¿Por qué mi función solo se ejecuta una vez por carga de página?
- 13. ¿Cómo activar una función una vez, y solo una vez ...?
- 14. primavera ThreadPoolTaskExecutor sólo se ejecuta un hilo
- 15. Tema: ¿Cómo reiniciar el hilo una vez completado?
- 16. ¿Cómo se nombra un hilo que ejecuta una Tarea?
- 17. el diálogo de jquery ui se abre solo una vez
- 18. ¿Agregar código al complemento que solo se ejecuta la primera vez que se activa?
- 19. ¿Cómo hacer que un bookmarklet se ejecute solo una vez?
- 20. Usar el temporizador solo una vez
- 21. jQuery - Haz solo una vez
- 22. layoutAnimation funciona solo una vez
- 23. Android - Obtener ubicación solo una vez
- 24. Mostrar div solo una vez
- 25. Ejecuta MBProgressHUD en otro hilo?
- 26. JS setInterval ejecuta sólo una vez
- 27. doble núcleo utilización de la CPU w solo hilo/Java que se ejecuta
- 28. ¿Cómo iniciar actividad solo una vez cuando la aplicación se abre por primera vez?
- 29. ¿El método de configuración de la serie de pruebas se ejecuta una vez para cada prueba, o solo una vez para todas?
- 30. Verificando MATLAB se ejecuta en modo multi-hilo
Sí! ExecutorService es la mierda, también puede manejar una BlockingQueue. –