import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Main {
Car car;
String[] cars = {"Car1", "Car2", "Car3", "Car4", "Car5"};
Main() {
car = new Car();
}
void main() throws Exception {
List<CompletableFuture<Boolean>> futures = new ArrayList<>();
List<CompletableFuture<Void>> dependentFutures = new ArrayList<>(); // To track dependent actions
for (String carName : cars) {
CompletableFuture<Boolean> dbUpdateFuture = car.process(carName, futures);
dependentFutures.add(dbUpdateFuture.thenAccept(success -> doSomethingElseCode(carName, success))); // Call doSomethingElseCode
}
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
CompletableFuture.allOf(dependentFutures.toArray(new CompletableFuture[0])).join(); // Wait for dependent actions
boolean overallSuccess = futures.stream()
.allMatch(future -> {
try {
return future.get();
} catch (Exception e) {
return false;
}
});
if (!overallSuccess) {
throw new Exception("One or more updateInDatabase calls failed.");
}
System.out.println("All processing completed successfully.");
}
void doSomethingElseCode(String carName, boolean success) {
if(success){
System.out.println("Doing something else with: " + carName + " (after successful DB update)");
// ... your code here ...
} else {
System.out.println("Doing something else with: " + carName + " (DB update failed)");
}
}
// ... (rest of the Main class and other classes remain the same) ...
}