본문 바로가기

Web Programing Language/JSP-servlet

서블릿 프로그래밍 #4 - 병행성 문제(synchronized, SingleThreadModel 인터페이스 구현)

자, 이번 시간에는 저번에 말씀드렸던 service( ) 메소드의 병행적 실행에 의해 생기는 문제점


병행성 문제


를 해결하는 방법에 대해서 말씀드릴게요.


저번 시간에 병행성 문제를 해결하는 방법으로는

synchronized 키워드SingleThreadModel 인터페이스

두가지라고 말씀을 드렸는데, 일단 해결하는 방법에 대한 개념을 먼저 잡고 넘어 가도록 하지요.


잠깐, 여기서 멈추고 해결할 수 있는 방법을 생각해 보세요.


아 화장실 다녀왔어요 ㅎㅎ

어떻게 아시겠어요??


참고로 완벽한 해결방법은 없습니다.

한가지는, 해당 객체를 만드는 것을 한번에 한명으로 제한한다. 즉, 스레드를 한 개만 만들 수 있도록 하는 것        이지요.

두번째는, 문제를 발생시킬 수 있는 부분(메모리)에 대해서 한 번에 한 명만 사용가능하게 만드는 것이지요.

위의 것이 SingleThreadModel 인터페이스,

아래의 것이 synchronized 키워드의 사용입니다.


여기서 생각 할 수 있는 것은 SingleThreadModel 인터페이스는 말도 안되는 기능이라는 것이지요. 한번에 한명만 접속할 수 있는 페이지라니 말도 안되지 않나요? ㅋㅋ 따라서 서블릿 2.4 표준부터는 가급적 사용하지 않도록 하기 위해서 deprecated 설정되어 있습니다.


그래도 있는 기능이니, 코딩 을 어떻게하는 지만 알아보도록 하겠습니다.


public class NotThreadSafe extends HttpServlet

inplements SingleThreadModel{

...

...

}


이렇게 쓰면 됩니다!! 근데 쓰지 마세요.


아무튼 그래서 대세는 synchronized 키워드를 사용하는 방법이지요.

사용하는 방법을 알아 볼게요.


synchronized 블록 사용법

synchronized(memory){

...

}


이렇게 해놓으면 한 번에 ... 에 해당하는 코드는 한 명 밖에 사용할 수 없지요. memory 라는 이름을 가진 메모리는 락이 걸려 한 번에 한 명밖에 컨트롤이 불가능 한 것입니다.

참 쉽지요??