2011-07-07 7 views
2

私は、私の関数の1つに@Async注釈を使用しており、その関数はFuture<integer>オブジェクトを返します。 メソッドが数回呼び出され、結果がリストに入れられます。 ExecutorCompletionService.take()と同様の方法でそのリストをポーリングする方法はありますか?ExecutorCompletionServiceのようにFutureオブジェクトの配列を春にポーリングする方法はありますか?

私は春を使用しているため、ExecutorCompletionService ctorに渡すエグゼキュータはありません。

答えて

1

まあ、私は、文字列によって提供されるものを発見していないので、私は(コメントは歓迎以上です)私自身を実装:

public class CompletionService<V> { 

    private List<Future<V>> results; 
    private static boolean loop = true; 

    public CompletionService(List<Future<V>> results) { 
     this.results = results; 
    } 

    public Future<V> take() { 

     Future<V> retval = null; 
     int i = -1; 

     while (loop) { 
      for (i = 0; i < results.size(); i++) { 
       if (results.get(i).isDone()) { 
        retval = results.get(i); 
        abortTake(); 
        break; 
       } 
      } 
     } 

     //remove task only if it is done 
     if (i > -1 && results.get(i).isDone()) { 
      results.remove(i); 
     } 
     resetLoop(); 
     return retval; 
    } 

    public synchronized void abortTake() { 
     loop = false; 
    } 

    private synchronized void resetLoop() { 
     loop = true; 
    } 

} 
関連する問題