Сервлеты и потоки

Август 12, 2011

Рассказав о сервлетах в прошлый раз, я забыл сообщить о мультипоточной модели сервлета. Это очень важный момент при разработке корпоративных Java приложений:

Спецификация сервлетов предусматривает несколько моделей выполнеия, влияющих на возможность параллельной обработки запросов. По умолчанию используется мультипоточная модель, в которой все запросы относятся к одному сервлету, обрабатываются одним его экземпляром. При этом его метод service вызывается контейнером в разных потоках выполнения, каждый из которых порождается для обработки одного запроса. В этой модели все поля класса сервлета совместно используются несколькими потоками, что требует синхронизации доступа к ним для избежания непредсказуемых результатов.

Предусматривается также однопоточная модель, когда может поддерживаться пул экземпляров сервлета, с каждым из которых работает только один поток выполнения. Для включения однопоточной модели класс сервлета должен реализовать интерфейс javax.servlet.SingleThreadModel в дополнение интерфейсу javax.servlet.Servlet.

Ещё один случай предусмотренный спецификацией — это строго последовательная обработка запросов. Для этого достаточно при реализации метода service пометить его ключевым словом synchronized.

Основная модель — мультипоточная, остальные рассматриваются как deprecated.

_____________________________________

Оперативная доставка дизельного топлива от надежного партнера. Всегда качественный проверенный товар. Доставим надежно, в срок и безопасно. Звоните!