'JAVA'에 해당되는 글 51건
- 2012.01.25 servlet 병행성 문제
2012. 1. 25. 18:17
servlet 병행성 문제
2012. 1. 25. 18:17 in JAVA
일반적으로 서블릿은 멀티쓰레드 방식으로 수행되므로 공유되는 자원이 있는 경우에는
병행성(concurrency) 때문에 발생하는 문제들을 잘 고려해서 작성해야 한다.
공유 자원들로는 메모리에 로드되는 변수와 클래스 인스턴스 등과 외부의 파일, 데이터베이스,
네트워크 컨넥션 등이 있을 수 있다.
병행성 문제가 발생할 수 있는 경우에는 synchronized를 사용해서 함수 혹은 코드의 일부분에 Lock을 걸거나
서블릿 클래스에 SingleThreadModel 인터페이스를 구현한다.
SingleThreadModel 인터페이스를 구현하는 경우에는 하나의 Thread만 사용되기 때문에
접속자가 많은 경우에 성능상의 문제가 생길수 있다.
또한 SingleThreadModel 인터페이스는 서블릿 2.4 표준에서는 가급적 사용하지 않도록 하기 위해서
deprecated 되었다.
public class NotThreadSafe extends HttpServlet implements SingleThreadModel{
}
병행성(concurrency) 때문에 발생하는 문제들을 잘 고려해서 작성해야 한다.
공유 자원들로는 메모리에 로드되는 변수와 클래스 인스턴스 등과 외부의 파일, 데이터베이스,
네트워크 컨넥션 등이 있을 수 있다.
병행성 문제가 발생할 수 있는 경우에는 synchronized를 사용해서 함수 혹은 코드의 일부분에 Lock을 걸거나
서블릿 클래스에 SingleThreadModel 인터페이스를 구현한다.
SingleThreadModel 인터페이스를 구현하는 경우에는 하나의 Thread만 사용되기 때문에
접속자가 많은 경우에 성능상의 문제가 생길수 있다.
또한 SingleThreadModel 인터페이스는 서블릿 2.4 표준에서는 가급적 사용하지 않도록 하기 위해서
deprecated 되었다.
public class NotThreadSafe extends HttpServlet implements SingleThreadModel{
}