Код: Выделить всё
import java.time.Instant;
import java.util.concurrent.StructuredTaskScope;
import java.util.concurrent.TimeoutException;
public class Main {
public static void main(String[] myData) {
try (var scope = new StructuredTaskScope()) {
var subtask1 = scope.fork(() -> {
Thread.sleep(3000);
return "slow";
});
var subtask2 = scope.fork(() -> {
Thread.sleep(1000);
return "fast";
});
try {
scope.joinUntil(Instant.now().plusMillis(2000));
} catch (TimeoutException te) {
System.out.println("Timeout occurred");
}
switch (subtask1.state()) {
case SUCCESS -> System.out.println("1s"+subtask1.get());
case FAILED -> System.out.println("1f");
case UNAVAILABLE -> System.out.println("1u");
case null, default -> System.out.println("1w");
}
switch (subtask2.state()) {
case SUCCESS -> System.out.println("2s"+subtask2.get());
case FAILED -> System.out.println("2f");
case UNAVAILABLE -> System.out.println("2u");
case null, default -> System.out.println("2w");
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Код: Выделить всё
Timeout occurred
1u
Exception in thread "main" java.lang.IllegalStateException: Owner did not join after forking subtasks
at java.base/java.util.concurrent.StructuredTaskScope.newIllegalStateExceptionNoJoin(StructuredTaskScope.java:439)
at java.base/java.util.concurrent.StructuredTaskScope.ensureJoinedIfOwner(StructuredTaskScope.java:477)
at java.base/java.util.concurrent.StructuredTaskScope$SubtaskImpl.get(StructuredTaskScope.java:917)
at org.example.Main.main(Main.java:34)
Подробнее здесь: https://stackoverflow.com/questions/797 ... ut-scenari
Мобильная версия