Runnable demos for the ankurm.com structured-concurrency-java article: the ExecutorService thread leak and its fix, every built-in Joiner, structure violations, timeouts, a custom Joiner, JSON thread dumps (in-process and jcmd), scoped values, javap diffs of the API on 25, 26, 27 and 28-ea, compiler output for six pieces of 25/26-era code, and the preview class-file trap between 27 and 28. Transcripts in output/. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01CifR2BE7PBvRy5hT8TS9oz
13 lines
606 B
Java
13 lines
606 B
Java
import java.util.List;
|
|
import java.util.concurrent.*;
|
|
import java.util.concurrent.StructuredTaskScope.Joiner;
|
|
import java.util.concurrent.StructuredTaskScope.Subtask;
|
|
|
|
/** A custom Joiner as written for JDK 26: two type parameters and onTimeout(). */
|
|
public class OldJoiner<T> implements Joiner<T, List<T>> {
|
|
private final java.util.Queue<T> results = new ConcurrentLinkedQueue<>();
|
|
public boolean onComplete(Subtask<T> s) { if (s.state() == Subtask.State.SUCCESS) results.add(s.get()); return false; }
|
|
public void onTimeout() { }
|
|
public List<T> result() { return List.copyOf(results); }
|
|
}
|