Pregunta

Estoy escribiendo un cliente Java que teóricamente podría usarse en un entorno diferente: Java Main (), en un contenedor de servlet o mediante inyección de dependencia.

El cliente implementa la agrupación de subprocesos de conexión interna.

El problema con este enfoque es que los usuarios del cliente que desconocen el hecho de que se implementa un grupo de hilos internos verán que su aplicación "cuelga" al cerrar. Mis usuarios necesitan saber enviar un mensaje de cierre () a la biblioteca.

Me pregunto si se podría adoptar algún otro enfoque alternativo que, por un lado, me permita comenzar un grupo de hilos para mis conexiones; Y, por otro lado, atrapa algún evento, tal vez un evento JVM, que indica que el JVM está bajando, lo que me permitirá llamar a mi implementación de cierre ().

¿Fue útil?

Solución

Aunque puede agregar ganchos, como se sugirió anteriormente, el problema que es probable que tenga es que el pido de subprocesos todavía tenga hilos activos.

Creo que si marcas tus hilos individuales como "demonios" (a través del método de hilt.setdaemon), entonces el JVM no mantendrá vivo si solo quedan hilos de demonio.

Del Javadoc:

Marca este hilo como un hilo de demonio o un hilo de usuario. La máquina virtual Java sale cuando los únicos hilos que se ejecutan son todos los hilos de demonio.

Usando esto, si se termina su hilo principal de no dam que no se termina, el JVM no se "colgará" debido a la Otro hilo en ejecución, y esto desencadena sus ganchos de apagado sin tener que enviar explícitamente instrucciones terminadas a los diversos hilos.

Otros consejos

Runtime.getRuntime().addShutdownHook() Sería lo que pensaría. http://blog.yohanliyanage.com/2010/10/know-the-jvm-2-shutdown Hooks/ tiene una explicación decente. ¿Eso ayuda?

Si el problema es que los usuarios de su código no son conscientes de que hay un grupo de hilos para cerrar, ¿tal vez la solución es informarlos de ello? En el método o constructor de fábrica para la clase relevante, tenga el ExecutorService para usar como argumento, por lo que la persona que llama es responsable de su ciclo de vida. Es decir, use la inyección de dependencia para impulsar la política hacia arriba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top