Gymterview
junior

Расскажите об интерфейсе SingleThreadModel

SingleThreadModel — маркерный интерфейс (без методов), при реализации которого контейнер гарантирует, что метод service() сервлета не будет одновременно выполняться в двух потоках. Контейнер реализует это либо через синхронизацию доступа к единственному экземпляру, либо через пул экземпляров сервлета.

Этот интерфейс является anti-pattern и deprecated с Servlet 2.4 по следующим причинам:

  • Синхронизация экземпляра не защищает разделяемые ресурсы (static поля, внешние системы, сессии)
  • Серьёзно снижает производительность — запросы обрабатываются последовательно
  • Создаёт ложное чувство безопасности — разработчик думает, что проблемы многопоточности решены

Правильный подход к потокобезопасности — не хранить состояние в полях сервлета, использовать локальные переменные и потокобезопасные структуры данных.

На собеседовании: важно сказать, что SingleThreadModel deprecated и является anti-pattern. Если интервьюер спрашивает, как обеспечить потокобезопасность — ответ через stateless-дизайн, а не через SingleThreadModel.