Как синхронизировать запрос внутри действия сервлета - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть метод действия сервлета. Если приходит один запрос и пытается что-то сделать. И если есть второй запрос, я хочу заблокировать его, пока не завершится первый. Как я могу этого добиться ??

Ответы [ 2 ]

0 голосов
/ 30 апреля 2012

У вас есть два варианта:

  1. Если ваша пользовательская база ограничена и не увеличивается, рекомендуется, чтобы ваш сервлет реализовал интерфейс SingleThreadModel.Это гарантирует, что сервлет обрабатывает только один запрос за один раз.

  2. Если ваша база пользователей растет и вам необходимо масштабировать, рекомендуется использовать synchronization block.Здесь вы будете синхронизировать только тот «кодовый блок», который может вызвать неоднозначность в ваших данных.Идея состоит в том, чтобы уменьшить объем кода, который нужно синхронизировать, чтобы он не вызывал проблем с производительностью.

0 голосов
/ 24 декабря 2011

Для этого можно использовать стандартный блок Java synchronized.Примерно так:

synchronized(this) {
  // do some stuff
}

Однако я настоятельно рекомендую не делать что-то подобное в сервлете, поскольку это может привести к серьезному снижению производительности.Сервлеты не должны иметь состояния, поэтому параллельные запросы не должны влиять друг на друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...