Подтвердить что ты не робот

Почему (javax.servlet.) SingleThreadModel устарел?

Почему javax.servlet.SingleThreadModel устарел?

4b9b3361

Ответ 1

javadoc говорит, почему. SingleThreadModel был разработан для легкого решения проблемы с низкой нагрузкой concurrency, но он даже не справился с этим:

Обратите внимание, что SingleThreadModel не решить все проблемы безопасности нитей. Для пример, атрибуты сеанса и статические к переменным по-прежнему можно получить доступ несколько запросов на несколько потоков в то же время, даже когда Используются сервлеты SingleThreadModel. Рекомендуется, чтобы разработчик принимать другие меры для проблемы вместо реализации этого интерфейса, например, избегая использования переменной экземпляра или синхронизация блока кода доступ к этим ресурсам.

Если он не может достичь того, для чего он был создан, его не следует использовать.

Ответ 2

В основном это плохой способ обработки concurrency. Вместо этого выведите состояние из своего сервлета, чтобы тот же сервлет мог использоваться одновременно несколькими потоками. Сохранение состояния в "пуле" экземпляров сервлета, каждое из которых может иметь состояние, оставшееся от предыдущего запроса и т.д., Довольно ужасно.

Ответ 3

Да Интерфейс SingleThreadModel устарел. Не используйте его. На самом деле вам это не нужно, вместо этого используйте локальные переменные вместо полей объектов, поскольку "каждый поток получает свою собственную копию локальных переменных в Java. Просто удалив поле объекта и заменив его локальная переменная, эта конкретная проблема с потоками решена". Ссылка

Ответ 4

Из Java Servlet Spec:

      Использование интерфейса SingleThreadModel гарантирует, что только один поток за раз будет выполняться в заданной службе экземпляров сервлета метод. Важно отметить, что эта гарантия распространяется только на каждый экземпляр сервлета, поскольку контейнер может выбрать объединение таких объекты. Объекты, доступные для более чем одного экземпляра сервлета в то время, например, экземпляры HttpSession, могут быть доступны в любом конкретное время для нескольких сервлетов, включая те, которые реализуют SingleThreadModel. n                   использование переменной экземпляра или синхронизация блока код доступа к этим ресурсам. Интерфейс SingleThreadModel устарел в этой версии спецификации.