It is obvious that a servlet can process multiple requests at the same time. For example, a connection is made on the server (a socket), to process this connection the server creates a new thread, the thread calls doGet of the servlet and goes to do something. While it is doing something another request arrives. A new thread will call doGet with other httpRequest and httpResponse instances. I did a test using netbeans and glasfish. In the doGet of a servlet I put:
synchronized(obj){
try{
obj.wait(50000)
}catch(InterruptedException e)
{
}
when the first request arrives in, the servlet does not accept any more requests until 50 seconds. It means that for the succeeding requests to be captured, the previous thread must do its job and return back to get another request. To be sure this is not because of synchronized statement i put a breakpoint on some statement before synchronized but never reached.