Единственная проблема в вашем подходе состоит в том, что он не масштабируется сверх определенной частоты запросов. Если запросы поступают быстрее, чем ваш сервер может их обработать, количество потоков будет непрерывно расти. Поскольку каждый поток добавляет некоторые накладные расходы и использует процессорное время, время обработки каждого запроса будет увеличиваться, поэтому проблема будет усугубляться (поскольку число потоков возрастает еще быстрее). В конце концов, ни один запрос не сможет быть обработан больше, потому что все время ЦП тратится на накладные расходы. Возможно, ваше приложение потерпит крах.
Альтернативой является использование ThreadPool с фиксированной верхней границей потоков (которая зависит от мощности оборудования). Если запросов больше, чем потоки могут обработать, некоторым запросам придется слишком долго ждать в очереди запросов и произойдет сбой из-за истечения времени ожидания. Но приложение по-прежнему сможет обрабатывать оставшиеся входящие запросы.
К счастью, Java API уже обеспечивает хорошую и гибкую реализацию ThreadPool, см. ThreadPoolExecutor . Использовать это, вероятно, даже проще, чем реализовать все с помощью оригинального подхода, поэтому нет причин не использовать его.