Pregunta

Tengo una tarea que quiero ejecutar a una tarifa fija.Sin embargo también necesito el resultado de la tarea después de cada ejecución.Esto es lo que probé:

La tarea

class ScheduledWork implements Callable<String>
{
    public String call()
    {
        //do the task and return the result as a String
    }
}

No, intenté usar el ScheduledExecutorService para programarlo.Resulta que no puedes programar una Callable a una tasa fija, sólo un Runnable se puede hacer así.

Por favor avise.

¿Fue útil?

Solución

Usar una patrón productor/consumidor:Tener el ejecutable poner su resultado en un Cola de bloqueo.tener otro hilo llevar() de la cola.

Take es una llamada de bloqueo (es decir, solo regresa cuando hay algo en la cola), por lo que obtendrás los resultados tan pronto como estén disponibles.

Podrías combinar esto con el patrón de hollywood para proporcionar al hilo en espera una devolución de llamada para que se llame a su código cuando haya algo disponible.

Otros consejos

A menos que no le importe el valor de retorno de su Callable, puedes envolverlo en un Runnable y usar eso para pasar a ScheduledExecutorService.

public static Runnable runnableOf(final Callable<?> callable)
{
    return new Runnable()
    {
        public void run()
        {
            try
            {
                callable.call();
            }
            catch (Exception e)
            {
            }
        }
    };
}

Entonces cuando quieras enviar a ScheduledExecutroService puedes pasar tu Callable:

ses.scheduleAtFixedRate(runnableOf(callabale), initialDelay, delay, unit);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top