10

固定レートで実行したいタスクがあります。ただし、実行するたびにタスクの結果も必要です。これが私が試したことです:

タスク

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

いいえ、を使用しScheduledExecutorServiceてスケジュールを設定しようとしました。Callable固定レートでスケジュールすることはできず、スケジュールできるのはaだけRunnableです。

お知らせ下さい。

4

2 に答える 2

10

プロデューサー/コンシューマーパターンを使用する:Runnableその結果をBlockingQueueに配置させます。キューから別のスレッドtake()を取得します。

Takeはブロッキング呼び出しであるため(つまり、キューに何かがある場合にのみ返されます)、結果が利用可能になり次第、結果を取得します。

これをハリウッドパターンと組み合わせて、待機中のスレッドにコールバックを提供し、何かが利用可能になったときにコードが呼び出されるようにすることができます。

于 2011-09-07T09:45:12.713 に答える
-1

の戻り値を気にしない場合をCallable除き、それを a でラップし、それ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);
于 2011-09-10T19:05:59.977 に答える