File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Servlets and the fly likes Whether HTTPServlet Extends Thread or Not? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Servlets
Bookmark "Whether HTTPServlet Extends Thread or Not?" Watch "Whether HTTPServlet Extends Thread or Not?" New topic
Author

Whether HTTPServlet Extends Thread or Not?

Raghavendra Holla
Ranch Hand

Joined: Jun 02, 2000
Posts: 58
Hi All,
I have following doubt. First of all i wnat to know whether Any way servlet extends java.lang.Thread class or Runnable Interface? This is just because as far my knowledge of understanding of Servlet, For each Client request There will be thread created and not Instance of an object? Am I correct? If suppose a thread is created then there should be some way of implementation of runnable interface?
Where does that implementation comes? Can any clarify me.
Thanks for your help.
Regards,
R V Holla
Frank Carver
Sheriff

Joined: Jan 07, 1999
Posts: 6920
A servlet may be used by more than one thread, but that doesn't mean that a servlet is a thread. A thread may instantiate and use any Java classes.
As a simpler example, consider the following code:

Each "Thing" is a thread, and the Thinger runs 10 of them at once. Each thread creates a String and uses a method it provides. It is important to notice that the String class is not a Thread, and it doesn't implement Runnable, yet it is used by many threads at once.
A servlet container also creates several threads, (for a simple example, one for each request). Each of these threads uses whatever class and object instances it needs (such as your servlet class as well as classes for things like Request and Response objects) to service the request, but these classes and objects it uses are not themselves threads.

Read about me at frankcarver.me ~ Raspberry Alpha Omega ~ Frank's Punchbarrel Blog
Raghavendra Holla
Ranch Hand

Joined: Jun 02, 2000
Posts: 58
Hello Frank,
Thanks for your help...
According to you, Servlet Container Will have several Threads of its own , and these threads can create as Many instances 0of Servlet class as required depending on multiple client request depending on availability of already created instances? Am I understood clearly?

But when I printing Servlets HASH code by multiple clients Request they are printing same Hash code. That menas there is only one instance of Servlet class available. Am I talking stupid?
Why i am asking all these details because, which ever book on Servlet you take when they compare CGI to Servlet, They tell CGI creates multiple process , Servlet doesn't. I don't how much a instance creation is advantage from a process..
Regards,
Holla.
Frank Carver
Sheriff

Joined: Jan 07, 1999
Posts: 6920
A servlet container is free to create as many or as few instances of your servlet class as it likes. Almost all servlet containers only create a single instance of your servlet class (*), which may be used simultaneously by many threads. This is why your hash code is the same - it is the same instance of your servlet code, but being used by different threads.
(*) Unless your servlet is marked as "implements SingleThreadModel" which is not a good idea unless you really, really, need it.
Raghavendra Holla
Ranch Hand

Joined: Jun 02, 2000
Posts: 58
Hello Frank,
Thanks a lot.. Things are clear now.. Sorry if i troubled you lot.
Regards,
R V Holla.
Frank Carver
Sheriff

Joined: Jan 07, 1999
Posts: 6920
No problem. Glad to help.
Kevin Mukhar
Ranch Hand

Joined: Nov 28, 2000
Posts: 83
Originally posted by Frank Carver:
A servlet container is free to create as many or as few instances of your servlet class as it likes. Almost all servlet containers only create a single instance of your servlet class (*), which may be used simultaneously by many threads. This is why your hash code is the same - it is the same instance of your servlet code, but being used by different threads.
(*) Unless your servlet is marked as "implements SingleThreadModel" which is not a good idea unless you really, really, need it.

You are almost correct. A servlet container is not free to create as many instances of a servlet as it wants. The servlet container is constrained by the servlet specification. Here is what the V2.3 spec says:
"2.2 Number of Instances
"In the default case of a servlet not implementing SingleThreadModel and not hosted in a distributed environment, the servlet container must use only one instance of a servlet class per servlet definition.
"In the case of a servlet that implements the SingleThreadModel interface, the servlet container may instantiate multiple instances of that servlet so that it can handle a heavy request load while still serializing requests to a single instance.
"In the case where a servlet was deployed as part of an application that is marked in the deployment descriptor as distributable, there is one instance of a servlet class per servlet definition per VM in a container. If the servlet implements the SingleThreadModel interface as well as is part of a distributable web application, the container may instantiate multiple instances of that servlet in each VM of the container."
Frank Carver
Sheriff

Joined: Jan 07, 1999
Posts: 6920
Ah. Yes, they do seem to have tidied that up in the recent versions of the spec. It does seem strange to restrict the servlet container to use only one instance though. Presumably it's so instance-variable hit counters and the like are guaranteed to work.
I shall modify my reply next time I answer a question like this.
Thanks.
Raghavendra Holla
Ranch Hand

Joined: Jun 02, 2000
Posts: 58
Thanks Frank and Kevin...
Regards,
R V Holla.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Whether HTTPServlet Extends Thread or Not?
 
Similar Threads
Servlet implict implementation
Solve this thread question!! confused!!
Thread class or Runnable interface ??
Thread objects and run() method
? What is the advantage of using Runnable interface instead of extending Thread class