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?

questionAnswers(2)

yourAnswerToTheQuestion