Я бы сказал, что (особенно) в Java потоки предназначены скорее для удобства, чем для производительности (есть только очень много ядер, и я думаю, вы хотели бы сохранить некоторый контроль над тем, какие потоки имеют приоритет) .
Вы ничего не сказали об объеме обмена сообщениями и количестве клиентов, но вы, возможно, захотите рассмотреть более естественный подход с точки зрения наличия одного потока, обрабатывающего сетевой ввод-вывод, и позволяющего ему жестко распределять входящие запросы. цикл и отображение АКТУАЛЬНОЙ работы (то есть запросов, которые вы не можете обработать в узком цикле) в пул потоков. IIRC, при такой настройке ограничивающим фактором будет максимальное количество TCP-соединений, которые вы можете одновременно ожидать ввода в одном потоке.
Для большего удовольствия сравните это с решением на языке с более легкими нитями, как в Erlang.
Конечно, как сказал @ WhiteFang34, вам не понадобится такое решение, пока вы не проведете серьезную симуляцию / использование своего кода. Связанные методы (и структуры, такие как Netty, где вы можете найти вдохновение) также могут быть найдены в этот вопрос здесь .
Существует определенная стоимость создания потока, в основном для каждого потока .