Я пытался реализовать асинхронный процесс, где родительский метод вызывает дочерний метод, который, в свою очередь, вызывает три разных метода.
Я хочу, чтобы весь этот процесс выполнялся асинхронно, то есть после того, как эти три вызова в дочернем методе будут выполнены параллельно, элемент управления должен вернуться к родительскому методу и продолжить выполнение до конца.
У меня есть этот код, который при тестировании работает нормально.
public ReturnSomething parent(){
child();
...//rest to UI
}
private void child(){
ExecutorService executorService = Executors.newFixedThreadPool(3);
Runnable service1 = () -> {
MyFileService.service1();
};
Runnable service2 = () -> {
MyFileService.service2();
};
Runnable service3 = () -> {
MyFileService.service3();
};
executorService.submit(service1);
executorService.submit(service2);
executorService.submit(service3);
}
Теперь, мое руководство просит меня скорее использовать это.
public ReturnSomething parent(){
child();
...//rest to UI
}
private void child(){
CompletableFuture.supplyAsync(() -> MyFileService.service1();
CompletableFuture.supplyAsync(() -> MyFileService.service2();
CompletableFuture.supplyAsync(() -> MyFileService.service3();
}
Я понимаю, что это CompletableFuture является новинкой в Java 8, но чем второй код лучше первого?
Поскольку для ExecutorService я не вызываю метод "get ()", я не буду ждать ответа aysnc. Итак, кто-нибудь может объяснить, в чем разница?