ExecutorService is a Java object containing the managed pool of threads and capable of scheduling the submitted tasks for these threads. The scheduling strategies vary in multiple available implementations.
The number of threads in the service can be fixed or grow on demand or grow till some boundary is reached. The tasks that cannot be started immediately can be queued or the submitting thread may be suspended till the task can be accepted.
The task to submit must implement either Runnable or Callable interface (Callable allows some extended features).
When no longer needed, ExecutorService must be explicitly shutdown like a tiny OS.