2017-02-08 8 views
0

私は、15の要求を並行して行い、すべての要求が完了するまで待ってから処理を進める必要があるコードを用意しています。Javaの未来:要求ごとの時間を取得

各リクエストには500-2500msの間が必要です。 Javaで、未来の要求を完了するのにかかる時間を得る方法はありますか?

+0

:具体的には、このような何かを見ることができますdocs/api/java/util/concurrent/CountDownLatch.html)。 – FMiscia

答えて

0

将来のAPI自体に組み込まれているメソッドについてはわかりません。ただし、ListenableFuturesを使用している場合は、未来を作るときにタイマーを開始し、onSuccessまたはonFailureコールバックでタイマーを停止することができます。あなたが完了してから続行するすべてのスレッドを待つしたい場合は、[たCountDownLatch](https://docs.oracle.com/javase/8/を使用することができます

public void timeRequests(MyRequests[] requestsToMake) { 
    ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(requestsToMake.length)); 
long startTimeNanos = System.nanoTime(); 
long[] endTimes= new long[requestsToMake.length] 
for(int i =0; i < requestsToMake.length; i++){ 
    MyRequest req = requestsToMake[i]; 
    ListenableFuture<MyData> rFuture = service.submit(new Callable<MyRequest>() { 
    public MyData call() { 
return req.makeRequest(); 
} 
}); 
Futures.addCallback(rFuture, new FutureCallback<MyData>() { 

public void onSuccess(MyData data) { 
    endTimes[i]=System.nanoTime(); 
    //whatever else you do 
} 
public void onFailure(Throwable thrown) { 
    endTimes[i]=System.nanoTime(); 
    //whatever else you do 
} 
}); 
} 
関連する問題