Сервлеты HTTP, как правило, поддерживают обработку нескольких клиентов одновременно. Если методы в вашем сервлете, работаюшие на клиента, используют общие ресурсы, то Вы должны, согласовать управление, создав сервлет, который обслуживает только одного клиента в определенный момент времени. (Вы также можете синхронизировать доступ к этому ресурсу. Эта тема обсуждается в уроке о потоках)

Чтобы сервлет обслуживал только одного клиента в определенный момент времени, Вам надо реализовать интерфейс SingleThreadModel в добавление к наследованию класса HttpServlet.

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

Например, сервлет ReceiptServlet принимает данные об имени пользователя, номере кредитной карточки и благодарит его за помещенный заказ. Если этот сервлет обновил базу данных, например, ту, что содержит информацию инвентаризации, тогда связь с базой данных является разделяемым ресурсом. Сервлет мог бы одинаково синхронизировать доступ к этому ресурсу, или реализовать интерфейс SingleThreadModel. Если сервлет реализует данный интерфейс, единственное изменение в коде по сравнению с предыдущим разделом выделено жирным шрифтом:

public class ReceiptServlet extends HttpServlet implements SingleThreadModel {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ...
    }
    ...
}