2011-09-07 15 views
8

固定料金で実行したい仕事があります。しかし、私はまた、実行ごとにタスクの結果が必要です。ここに私が試したものです:固定料金でコール可能な予定を設定する

タスク

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

私はそれを、スケジュールにScheduledExecutorServiceを使用しようとしたん。あなたは固定料金でCallableをスケジュールすることはできませんが、Runnableしかそうすることができません。

お知らせください。

+0

か...代わりのコーラブルの戻り値を待って、なぜそれでは扱えない:あなたはScheduledExecutroServiceに提出したいとき

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

次に、あなたがCallable渡すことができますか?だからあなたは実行可能ファイルの代わりにRunnableファイルを持ち、Runnableファイルには実行したい値があればそれを使い、必要なものを実行します。 –

答えて

8

producer/consumer patternを使用してください。putの結果はBlockingQueueです。キューから別のスレッドtake()があります。

テイクはブロッキングコールです(キューに何かがあるときにのみ戻る)ので、利用可能になるとすぐに結果が得られます。

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

-1

Callableの戻り値を気にしない場合は、RunnableにラップしてScheduledExecutorServiceに渡すことができます。

ses.scheduleAtFixedRate(runnableOf(callabale), initialDelay, delay, unit); 
関連する問題