2012-05-14 10 views
5

Los ejecutores generalmente se usan cuando se trata de tareas (de ejecución breve), pero ¿cuál es la mejor manera de tratar las tareas de larga ejecución, p. tareas que deberían ejecutarse durante toda la vida de una aplicación?¿Cómo ejecutar tareas de larga ejecución?

Digamos que tengo una aplicación en la que una tarea que se ejecuta en un hilo independiente sondea un directorio para ver los cambios cada X segundos. Esta tarea nunca debería abandonar el sondeo, a menos que la aplicación se cierre. ¿Cómo comienzo y administro esto?

¿Sería new Thread(theLongRunningTask).start() una mala opción?

Respuesta

5

Este es también un caso de uso para el marco de los ejecutores, específicamente scheduleAtFixedRate. Solo ten cuidado con ese hilo que cuelga cuando la aplicación está lista. Puede usar un ThreadFactory personalizado que haga daemon-threads. O, si quiere algo más simple, use la API Timer. Puede construir un Timer con un argumento booleano que significa "usar hilo daemon". También puede cerrar el servicio del ejecutor de forma explícita cuando finalice su aplicación.

+0

En lugar de threadfactory + daemon, puede cerrar el ejecutor al salir (suponiendo que las tareas enviadas son amigables con las interrupciones y/o no se ejecutan todo el tiempo). – assylias

+0

Sí, estoy de acuerdo: no soy muy aficionado a los hilos daemon, ya que pueden salirse fácilmente de su control en términos de gestión de hilos. – Cowboy

Cuestiones relacionadas