Deve ingressar em um Thread para garantir que seu cálculo esteja completo
Tenho um método utilitário (usado para teste de unidade, acontece) que executa umRunnable
em outro segmento. Ele inicia o encadeamento em execução, mas não espera oThread
para terminar, em vez disso, contando com umFuture
. Espera-se que um chamador do métodoget()
aqueleFuture
. Mas isso é suficiente para garantir a publicação segura do cálculo feito peloRunnable
?
Aqui está o 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;
}
Depois de ligarFuture.get()
no @ retornaFuture
, o chamador do método pode assumir com segurança que oRunnable
terminou a execução e seus resultados foram publicados com segurança?