Он также обрабатывает безопасную инициализацию опубликованных объектов, как показано в том же обзоре позже:

я есть служебный метод (используется для модульного тестирования, так бывает), который выполняетRunnable в другой теме. Он запускает поток, но не ждетThread закончить, вместо этого полагаясь наFuture, Ожидается, что вызывающий методget() этоFuture, Но достаточно ли этого, чтобы обеспечить безопасную публикацию вычислений, выполненныхRunnable?

Вот метод:

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

После звонкаFuture.get() на возвращенномFutureможет ли вызывающий метод безопасно предположить, чтоRunnable закончил выполнение, и его результаты были благополучно опубликованы?

Ответы на вопрос(2)

Ваш ответ на вопрос