La servlet elle-même n'est pas un thread. Le conteneur conserve une instance de la classe de servlet et chaque requête (thread) appelle le même objet servlet. Les instances de servlet sont donc partagées entre les threads. Dans le code pseudo il peut ressembler à ceci:
class ServerThread extends Thread {
private javax.servlet.Servlet servlet;
private javax.servlet.ServletRequest req;
private javax.servlet.ServletResponse res;
public ServerThread(javax.servlet.Servlet servlet, /* request and response */) {
this.servlet = servlet;
this.req = req;
this.res = res;
}
@Override
public void run() {
this.servlet.service(req, resp);
}
}
Pas question, en réalité, ce sera beaucoup, beaucoup, beaucoup plus complexe :-)
BTW: C'est la raison pour laquelle vos classes de servlet doivent être fil sûr!
Ce n'est pas parce que quelque chose est «sans danger pour les threads» (je prends cela comme le nom de «thread-able») que cela fournit un point d'entrée pour un thread. –
Connexes: http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables – BalusC