Мне сказали, что сервлеты Java могут запускаться асинхронно. Но означает ли это, что запросы на один сервлет обрабатываются асинхронно или что только запросы к различным сервлетам асинхронны.Являются ли HTTP-запросы для HttpServlet обработаны асинхронно
В принципе, у меня есть один сервлет в моем проекте:
public class DummyServlet extends HttpServlet
{
...
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
response.setContentType("text/plain; charset=utf-8");
PrintWriter writer = new PrintWriter(response.getOutputStream());
writer.write("DummyServlet invocation");
System.out.print("Invocation: " + counter);
Thread.sleep(5000);
System.out.println(" ... done.");
counter++;
writer.flush();
writer.close();
}
Теперь, когда я делаю два одновременных запросов, второй ждет, пока первый конец. Как можно добиться асинхронного поведения в этом сценарии?
ОБНОВЛЕНИЕ: запросы обрабатываются асинхронно, только мои запросы не генерируются асинхронно.
Методы в сервлете синхронны, каждый отдельный запрос обрабатывается синхронно. Тем не менее, контейнер использует отдельные потоки для отдельных запросов, поэтому они должны выполняться одновременно в разных потоках. Как вы думаете, почему два вызова выполняются серийно? – fvu
'Теперь, когда я делаю два одновременных запроса, второй ждет завершения первого. 'для данного кода его не верно, оба будут служить в разных потоках –
, что именно вы видите в своем выходе? – hvgotcodes