2011-12-31 3 views
3

서블릿에서 해당 코드가 동기화 된 블록과 동기화 될 수 있음을 읽었습니다. 그러나 서블릿 컨테이너에는 인스턴스가 하나만있는 경우가 많지만 서블릿 컨테이너는 인스턴스 풀을 유지할 수 있습니다. 확실히 이것은 동기화 된 블록이 요청 스레드가 어떤 인스턴스를 선택할지 모르기 때문에 작동하지 않을 것입니다.여러 인스턴스가있는 서블릿 동기화

+0

여기에 귀하의 질문은 무엇입니까? – milan

+2

나는 BalusC에서이 두 가지 대답을 읽어야한다고 생각합니다. [서블릿은 어떻게 작동합니까?] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/ 3106909 # 3106909) 및 [Servlet의 인스턴스] (http://stackoverflow.com/questions/2183974/difference-each-instance-of-servlet-and-each-thread-of-servlet-in-servlets/2184147#2184147) –

+2

고마워요, 그 2 답변에서 합의는 서블릿 당 1 인스턴스가 사용되므로 동기화가 작동합니다. – Jon

답변

1

서블릿 컨테이너는 아마도 공유 된 가변 데이터에 대한 액세스가 제대로 동기화 될 필요가 있다는 것을 의미 서블릿 코드를 실행하는 여러 스레드가있을 것입니다 의미 제공 요청에 대한 스레드 풀을 가지고 않습니다. 문제는 서블릿 단일 스레드를 만드는 방법을 경우

3

2.2 절은 말합니다 :

분산 환경 (기본값)에서 호스팅되지 서블릿에 대한

이 서블릿 컨테이너는 서블릿 당 하나 개의 인스턴스를 사용해야합니다 선언

따라서 컨테이너가 인스턴스 풀을 사용하는 경우 이는 사양을 위반 한 것입니다. 모든 서블릿 개발자가 여러 스레드가 동시에 서블릿에 액세스 할 수 있으므로 컨테이너가 그렇게하는 이유는 알 수 없으므로 서블릿은 스레드로부터 안전해야합니다.

+0

감사합니다. 이것이 내가 기대하는 것입니다. 방금 Tomcat이 각 서블릿의 인스턴스 하나를 구현한다는 것을 알았습니다. 어느 것이 잘못되었거나 일부 컨테이너가 실제로 사양을 위반 한 것입니다. – Jon

+1

"pool of threads"를 "pool of servlet instances"와 혼동했을 수도 있습니다. –

관련 문제