¿Cómo cerrar correctamente el grupo de subprocesos?
API relacionada:
Explicación de Runtime.addShutdownHook
Si. Si desea realizar operaciones como limpieza de memoria y destrucción de objetos cuando se apaga la JVM, o simplemente desea que un hilo no salga, puede usar Runtime.addShutdownHook.
La función de este método es agregue un gancho de apagado a la JVM. Solo cuando el programa se cierra normalmente, el sistema llama al método System.exit o la máquina virtual se apaga, se ejecutarán todos los enlaces configurados en el sistema. Solo cuando el sistema termine de ejecutar estos enlaces, la JVM se apagará. Un gancho es un hilo inicializado pero no iniciado. La JVM normalmente sale mediante dos eventos.
Salida normal del programa, como la última salida del proceso que no es demonio, salida usando System.exit(), etc.
Salida anormal del programa, como interrupción provocada por Ctrl C, salida del usuario o apagado del sistema, etc. Para obtener más información, consulte la documentación oficial: /javase/8/docs/api/index.html<
Explicación de Guava
Google sale del SDK abierto y proporciona múltiples clases. API concurrentes.
Los dos artículos anteriores hablaron sobre @Configuration @Bean @Import inyectando beans de grupo de subprocesos y las interfaces ApplicationRunner y CommandLineRunner para implementar la conducción de eventos de finalización de inicio del contenedor. Por lo tanto, se utilizan ejemplos para ilustrar cómo inyectar y con elegancia. cerrar el grupo de subprocesos en el proyecto.
Como se muestra en la imagen de arriba.
1. Inyecte un hilo poollt;componentThreadPoolgt; a través de la anotación @Configuration?@Bean.
2. Registre el grupo de subprocesos en el centro de registro; ThreadPoolRegistrationCentergt;
3. Complete el modo de observador cuando se inicie el contenedor Spring, use el método de ejecución proporcionado por la interfaz ApplicationRunner y agregue ganchos jvm para realizar la salida de jvm para que el grupo de subprocesos se pueda cerrar correctamente.
Que utiliza guavalt; MoreExecutors.shutdownAndAwaitTerminationgt;, jdklt; Runtime.getRuntime().addShutdownHookgt;