web容器是tomcat,连续发送多次请求为什么串行执行,而且多次请求在不同的线程中,求解答!!!

连续发送三次请求


这是控制台输出

servlet源代码如下:
public class ServletDemo1 extends HttpServlet {
private ServletConfig config;

@Override
public void init(ServletConfig config){
    this.config = config;
}


@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    System.out.println(Thread.currentThread().getName());
    System.out.println(new Date());
    System.out.println(request.getRemotePort());
    try {
        Thread.sleep(8000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    String thread = Thread.currentThread().getName();

    ServletContext sc = this.config.getServletContext();
    sc.setAttribute("data","milk");
    String url = sc.getInitParameter("url");

    String initName = this.config.getInitParameter("name");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C HTML 4.01 Transitional//EN\">");
    out.println("<HTML>");
    out.println(" <HEAD><TITLE>A Servlet Written By Milk</TITLE></HEAD>");
    out.println("<BODY>");
    out.println("This is "+initName+url+"$"+thread+"$");
    out.println(this.getClass());
    out.println(",using the GET method");
    out.println("</BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
}

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    doGet(request,response);
}
    }

地址后面加参数,比如
localhost:8080/sevlet/ServletDemo1?1
localhost:8080/sevlet/ServletDemo1?2

加了参数之后确实是三个线程了 而且并行执行的 但是还是不清楚不加参数为什么会串行 望解答

服务器处理请求的模式
1. 收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞 这个是单线程模型
2. 收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,解决了主线程阻塞的问题,有了一定程度的并发量
3. 类似2的模型,但是不是每次收到请求就开一个新的线程,而是使用线程池。这种方式实现的服务器性能会比2高。
4. 基于Java NIO实现的服务器模型,它是基于IO多路复用技术(例如Reactor模式)实现,只需要一个线程或者少量线程,就可以处理大量请求。
omcat运行可以选择BIO或者NIO模型,原理分别对应上面的3和4两种方式。Tomcat默认是BIO方式运行,如果想要换成NIO,可以配置server.xml