Debes unirte a un hilo para asegurarte de que se complete su cálculo
Tengo un método de utilidad (utilizado para pruebas unitarias, sucede) que ejecuta unRunnable
en otro hilo. Inicia el subproceso en ejecución, pero no espera a laThread
para terminar, confiando en unFuture
. Se espera que quien llama al métodoget()
eseFuture
. Pero, ¿es eso suficiente para garantizar la publicación segura del cálculo realizado porRunnable
?
Aquí está el método:
private static Future<Void> runInOtherThread(final CountDownLatch ready, final Runnable operation) {
final CompletableFuture<Void> future = new CompletableFuture<Void>();
final Thread thread = new Thread(() -> {
try {
ready.await();
operation.run();
} catch (Throwable e) {
future.completeExceptionally(e);
return;
}
future.complete(null);
});
thread.start();
, return future;
}
Después de llamar aFuture.get()
en el @ devuelFuture
, ¿la persona que llama del método puede asumir con seguridad queRunnable
ha finalizado la ejecución y sus resultados se han publicado de forma segura.