1. None Thread Safe 예제 (선언부)

<%!
Map<String,Object> param;
public void init(HttpServletRequest req) {
	param = ...;
}
%>
<%
init(request);
%>

위의 코드는 선언부에 param 객체를 선언해서
jsp가 컴파일될 때 param 객체는 멤버변수가 된다.
멤버변수는 여러 쓰레드가 접근할 경우 반드시 동기화를 시켜줘야 하는데
여기서는 동기화를 하지 않아 동시접근 시 안전성을 보장받을 수 없다.

 

 

2. Thread Safe 예제 (스크립틀릿)

<%
Map<String,Object> param;
...
param = ...;
%>

위의 코드에서 보이는 param 객체는 jsp 가 컴파일 될 때

멤버변수 영역이 아닌 _jspService 메소드 안에 자리잡게 된다.

이는 많은 쓰레드가 접근하더라도,

공유 객체가 아닌 메소드 안에서 생성되는 객체이기 때문에

Thread Safe 한 객체가 된다.

 

3. 결론

선언부(<%! %>)에는 final 변수, 동기화된 싱글톤 객체 등과 같이 Thread Safe 된 객체들이 와야 하고

스크립틀릿(<% %>) 내부에는 파라미터 가공과 같이 Thread에 민감한 객체들을 사용해야 한다.

+ Recent posts