Извините, но ваш вопрос не имеет особого смысла.
Если мы используем термин «запрос» обычным образом, клиент отправляет запрос на сервер, а сервер обрабатывает каждый запрос.Для сервера просто не имеет смысла не обслуживать запросы отдельно (в некотором смысле).
Возможно, вы спрашиваете что-то другое.(Вы имеете в виду «обслуживать каждый клиентский запрос в отдельном потоке»?) Что бы вы ни имели в виду, просмотрите вашу терминологию.
Учитывая, что вы говорите о выполнении запросов в разных потоках, затем используйтеExecutorService
API - хороший выбор.Используйте класс реализации, который позволяет вам установить верхнюю границу количества рабочих потоков.Если вы этого не сделаете, вы откроете себя для проблем, когда перегрузка приводит к выделению большого количества потоков, что только замедляет работу сервера.(Кроме того, создание новых потоков не дешево. Это стоит их перерабатывать.)
Вам также следует рассмотреть настройку вашего исполнителя так, чтобы у него не было очереди запросов.Вы хотите, чтобы служба executor блокировала поток, который пытается отправить задание, если работника нет в наличии.Пусть операционная система ставит в очередь входящие соединения / запросы на уровне ServerSocket
.Если вы ставите запросы в очередь внутри, вы можете столкнуться с ситуацией, когда вы тратите время впустую, обрабатывая запросы, которые на стороне клиента уже истекли / прекратили.