Skip to content

Instantly share code, notes, and snippets.

@bartekpacia
Created November 26, 2024 07:59
Show Gist options
  • Save bartekpacia/9be3efcb721d9001bc9e46a8fc8cf9c8 to your computer and use it in GitHub Desktop.
Save bartekpacia/9be3efcb721d9001bc9e46a8fc8cf9c8 to your computer and use it in GitHub Desktop.
Simple structured concurrency example
import java.util.concurrent.StructuredTaskScope;
import java.util.concurrent.StructuredTaskScope.Subtask;
public class JavaConcurrency {
public static void main(String[] args) {
try (final var scope = new StructuredTaskScope.ShutdownOnFailure()) {
System.out.println("Task is starting");
Subtask<String> subtask = scope.fork(() -> fetchData());
scope.join();
final String result = subtask.get();
assert result.equals("data");
System.out.println("Task finished, result: " + result);
Subtask<String> subtask2 = scope.fork(() -> fetchData());
scope.join();
final String result2 = subtask2.get();
assert result2.equals("data");
System.out.println("Task finished, result2: " + result2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static String fetchData() throws InterruptedException {
Thread.sleep(1000);
return "data";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment