Создание нового потока - не лучший способ из-за накладных расходов на создание. Вместо того, чтобы создавать новые потоки, вы должны по крайней мере использовать пул потоков (подробнее см. Исполнитель ).
Также важен жизненный цикл потоков. Если он слишком короткий, производительность может быть еще хуже из-за переключения контекста.
Другим важным моментом является количество процессоров / ядер, которые у вас есть. Как правило, вы должны использовать 1-2 потока на ядро, если ваши задачи сильно нагружают процессор (я полагаю, это ваш случай). Вы можете немного увеличить это число (скажем, 3-5), если ваши задачи требуют интенсивного ввода-вывода.