2011-10-06 7 views
1

서블릿 요청은 기본적으로 다중 쓰레드임을 이해합니다. NetBeans를 사용하여 간단한 서블릿을 만들었고 Tomcat과 JBoss 모두에서 단일 스레드로 보입니다.서블릿 다중 쓰레드

은이 코드를 사용하여 테스트 :

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라는이의 doGet에서 호출)

나는 거의 같은 시간에 내 브라우저에서이 탭에서이 액세스 및 멀티 스레딩이 일을했을 경우

, 나는 그것을 "액세스"2 개의 서로 다른 스레드 ID를 누른 다음 두 스레드의 "출구"인쇄 기대합니다. OctaveServlet @ 31ccfe threadID : 34 14 : 53 : 46,840 INFO [-

14 : 53 액세스 processRequest라는 41,839 INFO [표준 출력 (127.0.0.1-8080-1 HTTP) 대신,이 출력을 얻을 stdout] (http - 127.0.0.1-8080-1) exit processRequest : OctaveServlet @ 31ccfe threadID : 34 14 : 53 : 46,867 정보 [stdout] (http - 127.0.0.1-8080-1) access processRequest : OctaveServlet @ 31ccfe threadID : 34 14 : 53 : 51,867 INFO [stdout] (http - 127.0.0.1-8080-1) exit processRequest : OctaveServlet @ 31ccfe threadID : 34

위에서 알 수 있듯이 스레드는 하나뿐입니다. 말할 필요도없이, SingleThreadModel을 구현하지 않습니다.

어떤 도움

많은 감사 ,

, 7 AS 보스, 우분투 11.04 썬 자바 1.6.0_26, 톰캣 7.0.14 : 넷빈즈 7.0.1, JVM :

여기 내 시스템의 세부 사항입니다 Oded.

답변

6

HTTP 연결 당 하나의 스레드를 사용하고 있습니다. 서버가 NIO를 사용하지만 포인트를 얻지는 않습니다. 귀하의 브라우저는 분명히 두 탭에서 동일한 HTTP 연결을 사용하고 있습니다. 두 개의 다른 브라우저 인스턴스 (예 : Firefox 및 Chrome)를 생성하면 예상대로 작동합니다.

+0

감사합니다. 브라우저가 범인이라고 짐작하지 않았을 것입니다! – OdedS