Tomcat 컨테이너에서 서블릿과 관련된 모든 필터를 수행하고 서블릿 자체가 동일한 스레드를 사용합니까? 즉 doFilter()는 서블릿의 service() 메소드와 같은 스레드에서 실행될 것인가? 미리 감사드립니다.Tomcat의 서브릿, 필터 및 스레드
답변
네, 각 요청은 단일 서블릿 인스턴스 내에서 수행됩니다. 서블릿 컨테이너는 각 요청을 수신하고 HttpServletRequest 및 HttpServletResponse가 포함 된 새 스레드를 시작합니다. 이 스레드는 서블릿 인스턴스의 서비스 메소드에서 요청을 처리하며 서비스 메소드가 완료 되 자마자 폐기됩니다.
예, 각 요청은 모든 필터와 대상 서블릿을 포함하여 단일 스레드에서 수행됩니다.
질문이 더 많을 것으로 생각됩니다. ThreadLocal 객체를 사용하여 필터와 서블릿간에 데이터를 전달할 수 있습니까? 어떤 경우에는 대답은 절대적입니다. 앱 서버는 보안, 트랜잭션, 연결 및 기타 요청 정보를 추적하기 위해이 작업을 자체적으로 수행합니다.
ThreadLocal을 설정하는 동일한 코드에서 finally 블록의 ThreadLocal을 지워야합니다.
다른 사람들에 의해 이미 언급 되었 듯이 서블릿 자체는 동기화 될 수도 있고 그렇지 않을 수도 있지만 스레드 상태의 개념과 직결됩니다. 즉 얼마나 많은 쓰레드가 객체 foo에 대해 실행되는지 대 객체를 foo가 볼 수있게 할 수 있습니까? 두 번째 질문에 대한 대답은 항상 예입니다.
- AsyncContext를 통해 전화를 전달 EJB를에
- 혼합 @Asynchronous 또는 사용을 만들기 시작 :
어떤 비동기 통신의 사용을 만든 경우 대답은 '아니오'이다 없을 것이다 유일한 시간
TimerService
이는 원래 요청 스레드와 관련되지 않은 새 스레드를 시작하는 응용 프로그램 서버와 관련되어 있으므로 모든 ThreadLocal 상태가 새 스레드와 함께 이동하지 않습니다. 또한 이러한 API는 호출자의 보안 및 트랜잭션 컨텍스트가 호출자와 메소드가 다른 스레드에 있기 때문에 호출 된 메소드로 전파 될 수없는 이유이기도합니다.
고급 참고 사항, 일반적으로 InheritableThreadLocal은 비동기 호출이 호출자 스레드의 자식 스레드를 만드는 대신 스레드 풀에 대해 서버에 의해 수행되므로 일반적으로 작동하지 않습니다.
- 1. Tomcat의 데몬 스레드 수 줄이기
- 2. Java URL - 전달 인수 - 서브릿
- 3. Apache 및 Tomcat의 내용 압축
- 4. 스레드 ID를 기반으로하는 adb logcat의 필터 출력
- 5. Tomcat의 HornetQ
- 6. Tomcat의 쿠키
- 7. 스레드 및 스레드 스타트
- 8. 스레드 수면 및 스레드 합류
- 9. 파이프 및 필터 및 CompiledQuery.Compile
- 10. CALayer 필터 및 경계
- 11. sfDoctrineGuardPlugin 및 admin 필터
- 12. Tomcat의 별칭 localhost
- 13. Tomcat의 NIO 커넥터
- 14. Tomcat의 JPA2 - 가능합니까?
- 15. Tomcat의 호스트 파일은 가능합니까?
- 16. Tomcat의 응용 프로그램 풀?
- 17. Tomcat의 내부 ServletRequest 시작하기
- 18. jwchat와 tomcat의 opnefire 통합?
- 19. Tomcat의 일반적인 JNDI 리소스
- 20. Tomcat의 context.xml을 Jetty로 변환하십시오.
- 21. Tomcat의 캐시 제어
- 22. Jruby/JRack Tomcat의 Sendfile
- 23. Tomcat의 System.setProperty 범위
- 24. Tomcat의 소켓에 바인딩
- 25. Tomcat의 server.xml 동적 구성
- 26. Tomcat의 여러 인스턴스
- 27. UI 스레드 및 작업 스레드 자습서 찾기
- 28. .Net : 논리 스레드 및 스레드 로컬 저장소?
- 29. 주 스레드 + 스레드 풀 및 CPU 사용량
- 30. Tomcat의 JSF RichFaces 구성 요소
서블릿 컨테이너는 개발자가 아닌 서블릿 라이프 사이클을 관리합니다. – duffymo
서블릿이 SingleThreadModel 인터페이스를 구현하지 않는 한 서비스 메소드가 동기화된다는 것은 사실이 아닙니다. Tomcat은 행복하게 동일한 서블릿을 병렬로 처리하는 스레드를 실행합니다. – nos
'SingleThreadModel'은 5 년 전에 Servlet 2.4 이후 ** ** 더 이상 사용되지 않습니다 **. 당신은 그것을 사용해서는 안됩니다. 그것은 * 나쁜 디자인 *을 나타냅니다. – BalusC