我有一个任务,我想在一个固定的速率。但是我也需要结果的任务之后,每一个执行。这里是我想:

任务

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

没有,我试图使用 ScheduledExecutorService 到计划。原来你无法安排一个 Callable 在一个固定的速度,只有一个 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归因
不隶属于 StackOverflow
scroll top