자, 이번 시간에는 저번에 말씀드렸던 service( ) 메소드의 병행적 실행에 의해 생기는 문제점인
병행성 문제
를 해결하는 방법에 대해서 말씀드릴게요.
저번 시간에 병행성 문제를 해결하는 방법으로는
synchronized 키워드와 SingleThreadModel 인터페이스
두가지라고 말씀을 드렸는데, 일단 해결하는 방법에 대한 개념을 먼저 잡고 넘어 가도록 하지요.
잠깐, 여기서 멈추고 해결할 수 있는 방법을 생각해 보세요.
아 화장실 다녀왔어요 ㅎㅎ
어떻게 아시겠어요??
참고로 완벽한 해결방법은 없습니다.
한가지는, 해당 객체를 만드는 것을 한번에 한명으로 제한한다. 즉, 스레드를 한 개만 만들 수 있도록 하는 것 이지요.
두번째는, 문제를 발생시킬 수 있는 부분(메모리)에 대해서 한 번에 한 명만 사용가능하게 만드는 것이지요.
위의 것이 SingleThreadModel 인터페이스,
아래의 것이 synchronized 키워드의 사용입니다.
여기서 생각 할 수 있는 것은 SingleThreadModel 인터페이스는 말도 안되는 기능이라는 것이지요. 한번에 한명만 접속할 수 있는 페이지라니 말도 안되지 않나요? ㅋㅋ 따라서 서블릿 2.4 표준부터는 가급적 사용하지 않도록 하기 위해서 deprecated 설정되어 있습니다.
그래도 있는 기능이니, 코딩 을 어떻게하는 지만 알아보도록 하겠습니다.
public class NotThreadSafe extends HttpServlet
inplements SingleThreadModel{
...
...
}
이렇게 쓰면 됩니다!! 근데 쓰지 마세요.
아무튼 그래서 대세는 synchronized 키워드를 사용하는 방법이지요.
사용하는 방법을 알아 볼게요.
synchronized 블록 사용법
synchronized(memory){
...
}
이렇게 해놓으면 한 번에 ... 에 해당하는 코드는 한 명 밖에 사용할 수 없지요. memory 라는 이름을 가진 메모리는 락이 걸려 한 번에 한 명밖에 컨트롤이 불가능 한 것입니다.
참 쉽지요??
'Web Programing Language > JSP-servlet' 카테고리의 다른 글
서블릿 프로그래밍 #5 - 클라이언트 당기기, 서블릿, frame을 이용한 채팅 프로그램 소개 (0) | 2012.08.03 |
---|---|
서블릿 프로그래밍 #3 - 서블릿 객체의 라이프 사이클 (0) | 2012.08.02 |
서블릿 프로그래밍 #2 - 서블릿 프로그램에서의 form 데이터 처리 (0) | 2012.08.02 |
서블릿 프로그래밍 #1 - http 프로토콜에 대한 이해 (0) | 2012.08.02 |