I know a few cases:
- ```numThreads == 1``` will serialize to a single thread, like an EDT
- ```numThreads == CPUs / 2``` use several threads as computation while leaving other CPUs for other tasks or threads.
- ```numThreads == 2 * CPUs``` have a fixed, always running pool for I/O and not suffer thread recreation penalty from a CachedThreadScheduler.

The alternative would be to have a boundable CachedThreadScheduler to limit max thread count.