2011-02-24 6 views
12

ScheduledExecutorService tiene métodos como scheduleAtFixedRate (comando Runnable, longDelay inicial, período largo, unidad TimeUnit) para invocar clases Runnable a intervalos fijos. Quiero que mi Thread devuelva algún valor después de la ejecución. Entonces implementé la interfaz de llamada. No pude encontrar un método equivalente para invocar mi clase invocable a intervalos regulares. ¿Hay alguna otra forma de implementar esto? Si Java no proporciona esta funcionalidad, ¿cuál es la razón detrás de esa decisión? Por favor hagamelo saber. Gracias.¿Cómo se usa ScheduledExecutorService en java para llamar a una implementación invocable a intervalos fijos?

Respuesta

10

No puede programar Callable para la ejecución periódica ya que no está claro cómo devolver un resultado de dicha ejecución.

Si usted tiene su propio enfoque para devolver el resultado (por ejemplo, colocando el resultado en una cola), se puede envolver en CallableRunnable e implementar su enfoque:

final BlockingQueue<Result> q = new ArrayBlockingQueue<Result>(); 
final Callable<Result> action = ...; 

s.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
     q.put(action.call()); 
    } 
}, ...); 
Cuestiones relacionadas