javadoc говорит почему. SingleThreadModel
был разработан как простое решение для параллелизма с низкой нагрузкой, но он даже не справился с этим:
Обратите внимание, что SingleThreadModel не решает все проблемы безопасности потоков. Например, к атрибутам сеанса и статическим переменным по-прежнему можно получить доступ несколькими запросами в нескольких потоках одновременно, даже если Используются сервлеты SingleThreadModel. Разработчику рекомендуется использовать другие средства для решения этих проблем вместо реализации этого интерфейса , например, избегая использования { {1}} переменной экземпляра или синхронизацию блока кода , обращающегося к этим ресурсам.
Если он не может достичь того, для чего был разработан, его не следует использовать.
По сути, это плохой способ обработки параллелизма. Вместо этого извлеките состояние из вашего сервлета, чтобы один и тот же сервлет мог использоваться несколькими потоками одновременно. Сохранять состояние в «пуле» экземпляров сервлетов, каждый из которых может иметь состояние, оставшееся от предыдущего запроса и т. Д., Довольно ужасно.