Por ejemplo, si tengo un programa de línea de comandos java que genera un nuevo hilo (subproceso n. ° 2) para realizar un sondeo, y luego duermo durante 5 minutos. mientras el hilo principal (subproceso n. ° 1) del programa se está ejecutando y luego termina antes de que los 5 minutos del subproceso n. ° 2 estén activados, por lo que el programa saldrá. hay algun problema con esto? ¿Debo interrumpir el hilo nº 2 en el hilo nº 1 antes de que finalice la función principal en este programa?¿Es malo que una aplicación java se cierre mientras hay un hilo separado durmiendo?
Respuesta
Puede ser considerado una mala práctica y un signo de diseño deficiente por algunos, pero en principio no debería haber ningún problema para terminar la JVM con System.exit
. No, si no hay limpieza para ser realizada por el Subproceso # 2.
Otro problema es si el subproceso nº 2 puede estar en el medio de alguna acción.
Depende enteramente de lo que está haciendo. Cuando el programa finalice, el proceso terminará, tomando cualquier hilo adicional con él. El único problema potencial sería si el subproceso n. ° 2 tiene algún control de recursos. Sin embargo, si todo lo que hace es leer, entonces no debería tener un problema.
Los subprocesos no deamon se siguen ejecutando en segundo plano después de que main ha finalizado la ejecución.
Como resultado, tendrá hilos colgantes a menos que explícitamente llame al System.exit
, lo que mata a todos los hilos.
Sin embargo, el mejor enfoque sería detener el hilo # 2.
Simplemente use un indicador de estado, p. boolean die
en el hilo nº 2.
El subproceso # 1 interrumpirá el subproceso n. ° 2, el subproceso n. ° 2 verá el indicador de troqueles (establecido por el subproceso n. ° 1) establecido en verdadero, hará las limpiezas necesarias y saldrá con elegancia.
En su caso, el hilo # 2 está durmiendo durante 5 minutos y no hará nada, estará bien.
Recuerda dejar que el indicador de morir sea del tipo 'AtomicBoolean' o al menos volátil. – aioobe
Eche un vistazo a here.
Para la finalización de un programa Java, es necesario que todos los subprocesos no daemon terminen primero.
Una vez que todos los subprocesos no daemon detienen su ejecución, la JVM eliminará todos los subprocesos de daemon y se cerrará.
En su caso, no debería haber ningún problema, a menos y hasta que su Thread #2
esté desempeñando alguna función importante, como el manejo de recursos.
- 1. ¿BeginInvoke() ejecuta un hilo separado?
- 2. ¿Cómo comprobar si un hilo está durmiendo?
- 3. Cierre con gracia un hilo
- 4. SensorEventListener en un hilo separado
- 5. Impedir que un usuario cierre una aplicación que se abre mediante un programa C#
- 6. Java try/catch mientras que la adquisición/recursos de cierre
- 7. ¿Cómo usar OpenGL ES en un hilo separado en iphone?
- 8. ¿Es importante llamar a CoUninitialize en un hilo que finalizará antes de que se cierre mi aplicación?
- 9. Analizar una aplicación Java multi-hilo
- 10. ¿Desea actualizar TWebBrowser en un hilo separado?
- 11. Ejecutar una aplicación Java en un proceso separado
- 12. Definición de una clase mientras se ejecuta una aplicación Java
- 13. Java hace que javax.swing.Timer se ejecute en un nuevo hilo?
- 14. OutOfMemoryError en un subproceso Java separado
- 15. Ejecutando un formulario Tkinter en un hilo separado
- 16. Consumo de CPU cuando el hilo está durmiendo usando Thread.sleep
- 17. ¿Es extraño que mi conexión SQLAlchemy MySQL siempre termine durmiendo?
- 18. hilo de Java que es mejor manera?
- 19. Evite que Android cierre la pantalla mientras la aplicación (con Phonegap) está en
- 20. iphone ios ejecutándose en un hilo separado
- 21. Java hacer, mientras que, mientras
- 22. ¿Cómo puedo ejecutar un servicio en un hilo separado?
- 23. ¿Cómo hago para que un subproceso espere a que JFrame se cierre en Java?
- 24. ¿El lazo cerrado es malo?
- 25. ¿Cómo puedo hacer que un fragmento de código se ejecute en un hilo separado?
- 26. ¿Por qué se considera que un "tipo inestable" es malo
- 27. Manejar NFC mientras el teléfono está durmiendo en Android
- 28. ¿Qué es un cierre? ¿Java tiene cierres?
- 29. Interrumpir o detener un hilo que duerme
- 30. Colocación de un NSTimer en un hilo separado
El programa no termina simplemente porque la función principal ha finalizado. Todos los subprocesos no daemon deben finalizar para que el programa se termine normalmente. – ILMTitan