Je comprends que les requêtes Servlet sont par défaut multithread. J'ai créé une simple servlet en utilisant NetBeans, et il semble être à simple thread, à la fois sur Tomcat et JBoss.servlet multithreading
Je l'ai testé en utilisant ce code:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("access processRequest: " + this + " threadID: " + Thread.currentThread().getId());
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(OctaveServlet.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("exit processRequest: " + this + " threadID: " + Thread.currentThread().getId());
}
(processRequest est appelé à partir doGet)
J'accédé à ce à partir de 2 onglets dans mon navigateur presque en même temps, et si multithreading aurait travaillé , Je m'attendrais à ce qu'il imprime "l'accès" avec 2 différents identifiants de fils, et puis la "sortie" des deux fils. Au lieu de cela, je reçois cette sortie:
14: 53: 41839 INFO [stdout] (http - 127.0.0.1-8080-1) accès processRequest: OctaveServlet @ 31ccfe ThreadID: 34 14: 53: 46840 INFO [ stdout] (http - 127.0.0.1-8080-1) quitter processRequest: OctaveServlet @ 31ccfe threadID: 34 14: 53: 46 867 INFO [stdout] (http - 127.0.0.1-8080-1) processus d'accèsRequest: OctaveServlet @ 31ccfe threadID: 34 14: 53: 51867 INFO [stdout] (http - 127.0.0.1-8080-1) sortie processRequest: OctaveServlet @ 31ccfe threadID: 34
Comme vous pouvez le voir était juste un fil. Inutile de dire que je ne suis pas en train d'implémenter le SingleThreadModel.
Voici les détails de mon système: NetBeans 7.0.1, JVM: Sun Java 1.6.0_26, Tomcat 7.0.14, JBoss AS 7, Ubuntu 11.04
Un grand merci pour toute aide,
Oded.
Merci! Je n'aurais pas deviné que le navigateur était le coupable! – OdedS