$ javac src/Failures.java && java Failures (28-beta+21-ea) -- Subtask.get() before join() java.lang.IllegalStateException: null -- leaving the try block without join() java.lang.IllegalStateException: Owner did not join after forking -- fork() from a thread that does not own the scope returned java.lang.WrongThreadException: Current thread not owner -- closing scopes out of order (not try-with-resources) java.util.concurrent.StructureViolationException: null -- join() twice java.lang.IllegalStateException: Already joined or scope is closed -- the failure surfaces as ExecutionException; pattern-match the cause I/O failed: disk gone -- two subtasks fail: which cause do you get? cause = first (the first to fail wins)