Это можно сделать с помощью ExecutorService
в пакете java.util.concurrent
.Executors
- это фабричный метод, который обеспечивает реализацию для пулов потоков с фиксированным числом потоков или размером пула потоков, ограниченным доступной памятью.
Из личного опыта, пулы потоков фиксированного размера надежнее, чем кэшированные пулы потоков, посколькук накладным расходам, связанным с уничтожением и созданием потоков.