Он работает, но работает в другом потоке, и вы не ждете или ничего не делаете с результатом. Как сказано в Javadoc из CompletableFuture.runAsync()
:
Возвращает новое CompletableFuture, которое асинхронно завершается задачей, выполняющейся в ForkJoinPool.commonPool () после запуска данного действия.
runAsync()
полезно для задач, которые ничего не возвращают. Если вы хотите получить результат, вы должны использовать supplyAsync()
, который возвращает CompletableFuture<T>
Тогда вы можете получить результат из него:
// Run a task specified by a Supplier object asynchronously
CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
return "Result of the asynchronous computation";
}
});
// Block and get the result of the Future
String result = future.get();
System.out.println(result);