How many times init() method gets called when we implement the single thread model. I think it's only one time only, is it correct? . As I know for each request servlet container creates one servlet instance to serve the incoming request. Does init() method gets called for each servlet instance?
I'm not sure if the servlet container creates a new instance of the servlet for each request. What happens is a single thread is executing at a given time; all other requests need to wait till that thread is finished executing. But there is only 1 instance of the servlet created. Hence, the question of init() method getting called multiple times doesnt arise. That method is called only once during the life cycle of the servlet.
Joined: Apr 02, 2008
Hi Souvvik Basu, what you said is correct in you point of view. To implement single thread model there are two techniques.
1. Only one servlet instance and other request will wait in queue to get chance
2. For each request servlet container creates new servlet instance.
As you said For each Servlet instance, init() is called once.
If the Servlet Container is implemented to create multiple instances of servlet, then it will invoke init() method for each servlet instance.
BTW, SingleThreadModel is deprecated in Servlet 2.4 spec.
If a servlet implements this interface, you are guaranteed that no two threads will execute concurrently in the servlet's service method. The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet.
so as of tomcat 5.5, it wont create a new instance of servlet for each request even servlet implements SingleThreadModel. instead it synchorize access to service method.