The
destroy() method will only be called when the application, or the server, is stopped or restarted. When a browser sends a request to a servlet, the container does not actually invoke the
service() method directly, but rather creates and starts a
Thread whose
run() method invokes the
service() method of the servlet instance in memory (always the same one, unless, confusingly, the SingleThreadModel interface is implemented by the servlet).
This way, it does not matter how many clients access the servlet at once, the container can just keep creating more threads (within reason).