When the Servlet API was released, the majority of the implementing containers used a thread per request. This meant a thread was blocked until the request processing finished and the response was sent to the client.
In those early days there weren’t as many devices connected to the Internet as nowadays. Due to the increased number of devices, the number of HTTP requests handled has grown. Due to this increase for a lot of web applications, keeping a thread blocked isn’t workable anymore.
As of the Servlet 3 specification, it is possible to handle a HTTP request asynchronously. ...