In fact, killing threads without control is never a good idea.
I would suggest an approach to put your workers in a BlockingQueue and then spawn a very limited number of threads (as many as your processors to reduce competition) to get started with these workers. As soon as the work is completed, the flow will pick up a new employee and begin the process again. When there is no worker in the queue, threads simply hang in the queue, waiting for new workers.
You can see the thread pool template
source share