私はExecutor service
私のの1つで使用していMultithreaded code
ます。すべてのスレッドが仕事を終えたかどうかを確認しようとしています。その後、特定のタスクを実行する必要があります。
現在、経過時間を測定する必要があるため、すべてのスレッドがそこでジョブの実行を終了した後にのみ経過時間を測定できます。だから私は現在このコードを持っていますか?そして、私はで測定time elapsed
していfinally block
ます。
ExecutorService service = Executors.newFixedThreadPool(noOfThreads);
long startTime = System.nanoTime();
try {
for (int i = 0; i<noOfThreads; i++) {
service.submit(new Task());
}
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
//Do I need this while block here?
while (!service.isTerminated()) {
}
} catch (InterruptedException e) {
//Log exception here
} finally {
long estimatedTime = System.nanoTime() - startTime;
logTimingInfo(estimatedTime, noOfTasks, noOfThreads);
}
ここが必要かどうかわかりませwhile loop
んか?私の現在のやり方は正しいですか?
更新されたコード:-
したがって、以下のコードは正常に機能するはずです。右?
ExecutorService service = Executors.newFixedThreadPool(noOfThreads);
long startTime = System.nanoTime();
try {
for (int i = 0; i<noOfThreads; i++) {
service.submit(new Task());
}
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
} catch (InterruptedException e) {
//Log exception here
} finally {
long estimatedTime = System.nanoTime() - startTime;
}