По умолчанию запросы к сервлетам обрабатываются одновременно. Там нет настройки, которая включает / отключает это поведение. Это подтверждается JavaDoc для HttpServlet :
Сервлеты обычно работают на
многопоточные серверы, так что будьте в курсе
что сервлет должен обрабатывать одновременно
запросы и будьте осторожны, чтобы синхронизировать
доступ к общим ресурсам.
Однако, если ваш сервлет реализует интерфейс маркера SingleThreadModel , сервлет будет обрабатывать только один запрос за раз. Однако использование этого интерфейса обычно считается плохой практикой, и, поскольку вы не упомянули об этом, я предполагаю, что вы его не используете.
Конечно, даже если вы не реализуете SingleThreadModel
, вы можете сделать любой сервлет однопоточным, используя (возможно, неуместную) синхронизацию, например,
class MyServlet extends HttpServlet {
private void Object sharedObject = new Object()
protected synchronized void doGet(HttpServletRequest req, HttpServletResponse resp) {
// method logic goes here
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
synchronized(sharedObject) {
// method logic goes here
}
}
protected void doPut(HttpServletRequest req, HttpServletResponse resp) {
synchronized(this) {
// method logic goes here
}
}
}
В приведенном выше примере только один поток может одновременно выполнять один и тот же метод запроса, хотя возможно (например) для одного потока выполнить doPost()
, в то время как другой выполняет doGet()
.
Если вы не понимаете, почему это так, то я рекомендую вам немного прочитать о параллельном программировании на Java, прежде чем продолжить изучение вашей проблемы.