2010-01-23 11 views
8

Estoy siguiendo un interesante question en modo, en el uso de ScheduledThreadPoolExecutor para algunas tareas repetitivas.programar tareas ejecutables en java

Al programar este objeto se devuelve un objeto ScheduledFuture que se puede utilizar para cancelar la siguiente ejecución de la tarea.

Una cosa a tener en cuenta es la tarea en sí está completamente desacoplado del schedule--

ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1); 
ScheduledFuture nextSchedule = 
    executor.schedule(task, 60000, TimeUnit.MILLISECONDS); 

where-

SomeTask task = new SomeTask(); 

Por lo tanto la tarea en sí mismo no es consciente de la programación. Por favor aclare si hay una manera de cancelar la tarea y crear un nuevo horario para sí mismo.

Gracias

+1

Por cierto, es una práctica general votar al menos la respuesta que usted ha aceptado) – Bozho

+0

gracias bozho, señaló. – bushman

Respuesta

7

No hay razón para que la tarea no puede hacer referencia a la ScheduledExecutorService y programar para ejecutarse de nuevo, si es necesario:

// (Need to make variable final *if* it is a local (method) variable.) 
final ScheduledExecutorService execService = Executors.newSingleThreadScheduledExecutor(); 

// Create re-usable Callable. In cases where the Callable has state 
// we may need to create a new instance each time depending on requirements. 
Callable<Void> task = new Callable() { 
    public Void call() { 
    try { 
     doSomeProcessing(); 
    } finally { 
     // Schedule same task to run again (even if processing fails). 
     execService.schedule(this, 1, TimeUnit.SECONDS); 
    } 
    } 
} 
+0

@adamski, esto resultó ser realmente genial, gracias. – bushman

4

Pasar el executor a la tarea, de modo que pueda realizar manipulaciones con ella :

+0

esto debería haberme ocurrido. Gracias bozho – bushman

Cuestiones relacionadas