2011-05-24 610 views
12

Necesito programar algún trabajo para hacer en el futuro. Puedo hacerlo de 2 maneras:Diferencia entre TimerTask y Executors.newScheduledThreadPool (1)

  1. Crear una TimerTask y ejecutar timer.schedule(...);

  2. Uso Executors.newScheduledThreadPool(1):

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
    ScheduledFuture <?> scheduleHandle = scheduler.schedule(pushExternalRunnable, 
         runScheduleDate.getTime() - now.getTime(), TimeUnit.MILLISECONDS); 
    

¿Cuál es la diferencia entre estas 2 formas de programación de la trabajar en el futuro?

+1

Posible duplicado de [Java Timer vs ExecutorService?] (Http://stackoverflow.com/questions/409932/java-timer-vs-executorservice) – marcolopes

Respuesta

27

La mayor diferencia es que el temporizador programará todas sus tareas en una sola cadena de fondo. ExecutorService, por otro lado, creará nuevos subprocesos (si es necesario) para ejecutar las tareas (hasta el tamaño del grupo que especifique, en cuyo punto las tareas se pondrán en cola)

+1

Bien, nunca lo sabía. – asgs

15

Otra diferencia es si hay es una excepción no detectada En el caso de un temporizador, el hilo de fondo finaliza pero no se vuelve a subir. Con un ScheduledExecutor (incluso con una configuración de subproceso único), el ScheduledExecutor puede continuar después de una excepción no detectada. Intenta asegurarse de que se está ejecutando la cantidad deseada de subprocesos para procesar las tareas.

El ScheduledExecutor también produce un futuro en caso de que desee interactuar con el progreso.

Cuestiones relacionadas