Given this piece of code:
public List findPrices(String product){
List> priceFutures =
shops.stre
Let's consider a function that looks like this:
public CompletableFuture requestData(String parameters) {
Request request = generateRequest(parameters);
return CompletableFuture.supplyAsync(() -> sendRequest(request));
}
The difference will be with respect to which thread generateRequest()
gets called on.
thenCompose
will call generateRequest()
on the same thread as the upstream task (or the calling thread if the upstream task has already completed).
thenComposeAsync
will call generateRequest()
on the provided executor if provided, or on the default ForkJoinPool
otherwise.