I have the same question. I was making a Connection Pool, and it just dawned on me, if each of the Connection should be an individual Thread. But no, each Connection does not need to explicitly implment Runnable or extend Thread. Maybe it was already done within the COnnection class itself.
The fact is, when you deploy your servlet, one instance of your servlet will be created. When request comes in, each request will be handled by a thread according to servlet's specification. So each thread will have one connection to the database. (correct me if i am wrong)
Put it this way.. it is not so much a matter of 'are threads necessary'... as it is of ' you will get threads, because servlets are multithreaded'
So if you have database access code, you must decide whether you should make this a synchronized block or not. I'm not really that knowledgable about databases, but I understand there is such a thing as a read lock.
So imagine that one user hits the servlet and enters the method that reads from the database. A millisecond later, a second user also makes the same request. Will the second user's read fail because the first user has a read lock on that table? Hopefully not, maybe I'm shouting "the sky is falling, the sky is falling."
One cannot expect that a servlet runs as a singleton. There will be many many instances of a servlet, each in its own thread. But if you are using a database, in this context I would advise to use EJB; then bean and connection pool becomes Someone Else's Problem.