2012-05-24 8 views

Respuesta

22

En este caso, solo necesita la llamada al shutdown().

Hay dos opciones en el ScheduledThreadPoolExecutor, que es lo que se está creando entre bastidores aquí. getExecuteExistingDelayedTasksAfterShutdownPolicy() se establece de manera predeterminada en true y getContinueExecutingPeriodicTasksAfterShutdownPolicy() por defecto a false. Por lo tanto, simplemente al apagar el servicio, se cancelarán las tareas periódicas, pero las tareas demoradas se seguirán ejecutando. Como la tarea en cuestión es una tarea periódica, se cancelará al apagarla.

Mi opinión personal es que es mejor llamar al .cancel(true) manualmente antes del cierre. Aunque operacionalmente esto no tiene un efecto diferente, creo que es bueno para los programadores que no conocen las opciones en el ejecutor ver que la tarea periódica se debe cancelar al apagar. Esto también significa que si alguna vez alguien entra y cambia el ejecutor por uno que no se cancela al apagar, esta tarea aún se cancelará. Entonces realmente, creo que el principal beneficio aquí es la claridad del código.

Cuestiones relacionadas