ExecutorService
An object you hand tasks to, which runs them on threads it manages and returns Futures.
java.util.concurrent.ExecutorService accepts Runnable and Callable tasks via submit, invokeAll and invokeAny, and since Java 19 is AutoCloseable; close() refuses new tasks and waits for submitted ones.
See also