Espere a que todos los hilos terminen su trabajo y luego mida el tiempo transcurrido

Estoy usando Executor serviceen uno de mis Multithreaded code. Estoy tratando de ver si todos mis hilos han terminado de hacer su trabajo, luego necesito hacer cierta tarea.

Actualmente necesito medir el tiempo transcurrido, por lo que solo puedo medir el tiempo transcurrido solo después de que todos los hilos hayan terminado de ejecutar el trabajo. ¿Entonces tengo este código actualmente? Y estoy midiendo time elapseden el 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);
}

No estoy seguro si necesito while loopaquí o no? ¿Es la forma en que lo estoy haciendo bien o no?

Código actualizado: -

Entonces, el código a continuación debería funcionar bien. ¿Derecho?

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;
}
Respuesta 1

P: ¿Necesitas el while? A: no.

La awaitTerminationllamada anterior no regresará hasta que el servicio haya finalizado o (2^63 - 1)hayan transcurrido unos segundos. (Ese es un muy largo tiempo.)


ACTUALIZACIÓN : la versión actualizada me parece correcta.

Respuesta: 2

Estoy usando Hibernate 5 y PostgreSQL 11. Revisé dialectos y el último es PostgreSQL95Dialect. ¿Qué debo usar con una versión más nueva de la base de datos que tengo? Supongo que no hay mayor ...

Estoy tratando de usar la API de Dropbox para cargar un archivo desde una vista de lista. Mi código es: Archivo de archivo = Archivo nuevo (mFileMag.getCurrentDir () + "/" + elemento); inputStream = nuevo FileInputStream (archivo); ...

¿Es posible manipular un mensaje SOAP generado por Jax-WS como una cadena antes de enviarlo al servidor? Me gustaría interceptar el mensaje exactamente antes de enviarlo y modificar algunos ...

Acabo de hacer un programa que se supone que escanea un archivo y cuenta el número de líneas, vocales y muchas otras cosas, pero cuando lo ejecuto, entra en un bucle infinito. Estoy bastante seguro de que tiene que ver ...