Skip to content

Instantly share code, notes, and snippets.

@iamanvesh
Created February 4, 2021 03:35
Show Gist options
  • Save iamanvesh/84504ac6f907d51f73f40ce01f9db89e to your computer and use it in GitHub Desktop.
Save iamanvesh/84504ac6f907d51f73f40ce01f9db89e to your computer and use it in GitHub Desktop.
package com.company;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class GetVokal {
public static void main(String[] args) {
try {
System.out.println(handleRequest());
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static String handleRequest() throws ExecutionException, InterruptedException {
List<CompletableFuture<Integer>> parallel = new ArrayList<>();
parallel.add(processParallelStep(1));
parallel.add(processParallelStep(2));
parallel.add(processParallelStep(3));
parallel.add(processParallelStep(4));
var future = CompletableFuture.allOf(parallel.toArray(new CompletableFuture[0]))
.thenApply(result -> {
processSequentialStep(5);
processSequentialStep(6);
return processSequentialStep(7);
});
return String.valueOf(future.get());
}
private static CompletableFuture<Integer> processParallelStep(int stepNumber) {
return CompletableFuture.supplyAsync(() -> {
Random random = new Random();
try {
Thread.sleep(100 + random.nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.printf("Step %d completed!%n", stepNumber);
return stepNumber;
});
}
private static int processSequentialStep(int stepNumber) {
System.out.printf("Step %d completed!%n", stepNumber);
return stepNumber;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment