繁体   English   中英

以固定速率调度 Callable

[英]Scheduling a Callable at a fixed rate

我有一个要以固定速率运行的任务。 但是,每次执行后我还需要任务的结果。 这是我尝试过的:

任务

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

不,我尝试使用ScheduledExecutorService来安排它。 事实证明,您不能以固定速率安排Callable ,只有Runnable可以这样做。

请指教。

使用生产者/消费者模式:让 Runnable 其结果放在BlockingQueue 上 从队列中获取另一个线程take()

Take 是一个阻塞调用(即只有在队列中有东西时才返回),所以你会在结果可用时立即得到结果。

您可以将其与好莱坞模式相结合,为等待线程提供回调,以便在有可用内容时调用您的代码。

除非您不关心Callable的返回值,否则您可以将其包装在Runnable并使用它传递给ScheduledExecutorService

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

然后当你想提交给ScheduledExecutroService你可以传递你的Callable

ses.scheduleAtFixedRate(runnableOf(callabale), initialDelay, delay, unit);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM