218. Hooking task state
Starting with JDK 19, we can rely on Future.state(). This method computes the state of a Future based on the well-known get(), isDone(), and isCancelled(), returning a Future.State enum entry, as follows:
CANCELLED– the task was canceled.FAILED– the task was completed exceptionally (with an exception).RUNNING– the task is still running (has not been completed).SUCCESS– the task was completed normally with a result (no exception).
In the following snippet of code, we analyze the state of loading the testing team members and act accordingly:
public static TestingTeam buildTestingTeam() throws InterruptedException { List<String> testers = new ArrayList<>(); try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { List<Future<String>> futures = executor.invokeAll( List.of(() -> fetchTester(Integer.MAX_VALUE)...