In addition to the other comments, the other way to achieve this with loom is to use the new structured concurrency API.
This is overkill for a single task, but for your second example you could do a an invokeAny with something like this:
try (var scope = new StructuredTaskScope.ShutdownOnSuccess<String>()) {
scope.fork(() -> doSomething1());
scope.fork(() -> doSomething2());
scope.join(); // or if you wanted a 5 second timeout .joinUntil(Instant.now().plusSeconds(5))
String result = scope.result(); // This will return the result of either doSomething1() or doSomething2(), whichever won the race to finish first.
...
}
This is overkill for a single task, but for your second example you could do a an invokeAny with something like this:
https://download.java.net/java/early_access/loom/docs/api/jd...