CompletableFuture
используется для асинхронной обработки задач. Предположим, что в вашем приложении, если у вас есть две задачи, независимые друг от друга, вы можете выполнять две задачи одновременно (чтобы сократить время обработки)
public CompletionStage<T> myService() {
CompletableFuture.supplyAsync(() -> doingVeryBigThing(), heavyLoadBean);
CompletableFuture.supplyAsync(() -> doingAnotherBigThing(), heavyLoadBean);
}
В приведенном выше примере doingVeryBigThing()
и doingAnotherBigThing()
две задачи, которые не зависят друг от друга, поэтому теперь эти две задачи будут выполняться одновременно с двумя разными потоками из heavyLoadBean
пула потоков, попробуйте приведенный ниже пример, чтобы распечатать две разные имена потоков.
public CompletionStage<T> myService() {
CompletableFuture.supplyAsync(() -> System.out.println(Thread.currentThread().getName(), heavyLoadBean);
CompletableFuture.supplyAsync(() -> System.out.println(Thread.currentThread().getName(), heavyLoadBean);
}
Если вы не предоставите пул потоков, по умолчанию предоставленный Supplier
будет выполнен ForkJoinPool.commonPool()
общедоступная статическая CompletableFuture supplyAsync (Поставщик)
Возвращает новое CompletableFuture, которое асинхронно завершается задачей, выполняющейся в ForkJoinPool.commonPool (), со значением, полученным путем вызова данного поставщика.
public static CompletableFuture supplyAsync (Поставщик, поставщик,
Исполнитель-исполнитель)
Возвращает новое CompletableFuture, которое асинхронно завершается задачей, выполняемой в данном исполнителе, со значением, полученным путем вызова данного поставщика.