Встречается на собеседованиях • сегодня

Как Servlet работает в многопоточной среде

Сервлеты по умолчанию потоконебезопасны - один экземпляр сервлета обслуживает все запросы. Контейнер (Tomcat/Jetty) создает новый поток для каждого HTTP-запроса, но использует один экземпляр сервлета.

Основные проблемы:

  • Общие поля класса сервлета - источник race condition
  • Нельзя хранить состояние запроса в полях класса

Пример потоконебезопасного кода:

java
public class UnsafeServlet extends HttpServlet {
    private int count;  // Проблема! Общее состояние
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        count++;  // Race condition
        resp.getWriter().write("Count: " + count);
    }
}

Решение:

  1. Избегать полей класса (использовать локальные переменные)
  2. Для общего состояния использовать синхронизацию или concurrent-коллекции
  3. Реализовать SingleThreadModel (устаревший подход)
  4. Использовать ThreadLocal для данных, специфичных для потока

Лучшая практика - проектировать сервлеты как stateless-компоненты.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы