На основании моего тестирования на ноутбуке Mac каждый отдельный клиентский запрос, кажется, выполняется в отдельном потоке (я пробовал до тысячи потоков без каких-либо проблем. Я не знаю, если хотя есть верхняя граница. Я предполагаю, что максимальное количество потоков будет ограничено только памятью).
Затем эти потоки задерживаются на некоторое время (минуту или две), если они могут обслуживать больше клиентов. Если они какое-то время не используются, они получают GC.
Обратите внимание, что я использовал Thread.sleep()
на сервере для удержания каждого запроса, поэтому ни один из потоков не смог завершить задачу и перейти к другому запросу.
Дело в том, что при необходимости JVM может даже выделить отдельный поток для каждого клиентского запроса. Если работа выполнена и потоки свободны, она может использовать существующие потоки без создания новых.
Я не вижу ситуации, когда какой-либо клиентский запрос застрял бы в ожидании из-за ограничений RMI. Независимо от того, сколько потоков на сервере «занято» обработкой существующих запросов, новые клиентские запросы будут приниматься.