2011-10-06 2 views
1

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.

Répondre

6

Il utilise un thread par connexion HTTP (ce n'est pas exactement le cas lorsque le serveur utilise NIO, mais vous avez obtenu le point). Votre navigateur utilise apparemment la même connexion HTTP dans les deux onglets. Créez deux instances de navigateur différentes (par exemple Firefox et Chrome) et vous verrez que cela fonctionne comme vous le souhaitiez.

+0

Merci! Je n'aurais pas deviné que le navigateur était le coupable! – OdedS