Servlet似乎同步处理多个并发浏览器请求

iam*_*own 24 java concurrency servlets

据我所知,Java Servlets同时处理多个请求,我搜索了StackOverflow以及Google,并确认了我的想法.但是我现在很困惑,我写了一个似乎显示阻塞行为的简单servlet.

所以我有一个简单的Servlet:

public class MyServlet extends HttpServlet 
{
    private static final long serialVersionUID = 2628320200587071622L;

    private static final Logger logger = Logger.getLogger(MyServlet.class);

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    {
        logger.info("[doGet] Test before");

        try {
            Thread.sleep(60000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        logger.info("[doGet] Test after");

        resp.setContentType("text/plain");
        resp.getWriter().write("OK");

    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有2个浏览器窗口,我同时打开了我的Servlet.结果是第一个请求阻止第二个请求.日志还显示:

10:49:05,088 [http-8383-Processor14]  INFO MyServlet - [doGet] Test before
10:50:05,096 [http-8383-Processor14]  INFO MyServlet - [doGet] Test after
10:50:05,106 [http-8383-Processor22]  INFO MyServlet - [doGet] Test before
10:51:05,112 [http-8383-Processor22]  INFO MyServlet - [doGet] Test after
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些东西...... Servlet应该能够处理并发请求,但似乎并没有这样做.我也在服务方法上做了同样的事情,而不是doGet,它做了同样的事情.

有什么指针吗?

谢谢

Bal*_*usC 34

您的浏览器显然在不同的窗口中使用相同的HTTP连接.servlet容器每个HTTP连接使用一个线程,而不是每个HTTP请求.你应该运行两个物理上不同的webbrowsers来正确测试它.例如一个Firefox和一个Chrome.