A servlet instance is created when you start your webapp or when it is required first (if lazy-init is installed). It is deleted when your webapp stops when it is GCed. In a normal production environment, I would dare to state that this never happens (apart from deploying the new version).
Most (if not all) servlet containers work with a thread pool. This means that they reuse threads to process requests. Therefore, these threads never die; they return to the pool when they complete the request.
Of course, they die when you close the server :)
From the point of view of your application, you really should try to make your servlet standstill, and you can safely assume that each request is executed in its own dedicated thread.
source share