ExecutorService separates task submission from thread management. A bounded queue needs an admission policy when full, and a caller must handle rejected work. shutdown stops new submissions while allowing accepted work to finish. shutdownNow attempts interruption and returns queued work that never started; interruption is cooperative.
CompletableFuture describes dependent completion. thenApply maps a successful value, while exceptionally supplies recovery after failure. join can throw CompletionException. Virtual threads help when many tasks wait on blocking I/O; they do not make CPU instructions faster.
These APIs are missing from the browser SDK, and Thread.start cannot complete a normal run here. You will implement explicitly labeled admission and completion models in plain Java. The models teach the contracts without pretending to start workers or measure concurrency.