2009-11-03 7 views
0

JSP & Jdbc를 사용하여 응용 프로그램을 작성하고 있습니다. 여기서 사용자는 주석을 게시 할 수있는 테이블 이름이 "COMMENT_DATA"입니다. 이제 여러 사용자가 동시에 의견을 쓰고 게시하는 경우 스레드를 찾으러 갈 것입니다. 그래서 나는 데이터를 데이터베이스에 삽입하는 방법을 동기화 할 것입니다. 그렇다면 다른 요청을 처리하는 방법, 다른 요청을 대기열에 넣는 방법 및 되돌릴 방법을 데이터베이스에 쓰는 방법스레드를 사용한 요청 처리

+0

서블릿 컨테이너가 이미 멀티 스레드되어 있으므로 직접 처리 할 필요가 없습니다. – skaffman

답변

2

정확히를 필요한 잠금을 모두 할 것입니다. 각 HTTP 요청은 이미 자체 스레드입니다. 웹 컨테이너는 응용 프로그램의 수명 기간 동안 하나의 서블릿 인스턴스 만 생성하고 모든 요청간에 서블릿 코드가 공유된다는 점에 유의하십시오. 이는 모든 클래스 수준 변수 또는 정적 변수가 모든 요청간에 공유 될 것임을 의미합니다. 그러한 변수가 하나있는 경우 이 아니고 threadsafe가됩니다. 메서드 수준에서 요청 별 변수 threadlocal을 선언해야합니다.

JDBC에 관해서 : 솔리드 코드를 작성하면 모든 것이 잘 진행됩니다. 연결 풀을 사용하는 것은 연결 성능을 향상시키는 데 유용합니다 (실제로 노력할 가치가 있습니다. DB 연결은 풀 비용에서 연결을 재사용하는 동안 적어도 200 밀리 초 또는 그 이상까지 계산할 수있는 상당히 비싼 작업입니다.) 거의 아무것도). 그것은 당신이 쓰는 코드의 쓰레드 안전성에 아무런 변화가 없으며, 여전히 당신의 통제하에 있습니다. 기본 JDBC 코딩을 올바른 방법으로 수행하는 방법에 대한 명확한 그림을 얻으려면 this article이 유용 할 수 있습니다.

0

왜 이런 걱정을해야할지 모르겠습니다. 서블릿 컨테이너는 스레딩을 처리합니다 (예 : 스레드 풀을 통해). 데이터베이스가 여러 연결을 처리하므로 응용 프로그램의 여러 스레드에서 공유 상태를 수정하지 않으면이 문제에 대해 걱정할 필요가 없습니다.

+0

그런 다음 서버가 요청 당 테이블에 데이터를 삽입합니다. – i2ijeya

+0

요청 하시겠습니까? 예 –

1

위와 같이 서블릿 컨테이너는 요청에 대한 스레딩을 처리합니다. 나는. 다른 사용자가 서버에 연결하는 것보다 당신이 알고있는 새로운 스레드가 생성됩니다.

당신이해야 할 일은 jdbc 코드가 쓰레드 안전하다는 것을 보증해야하고 괜찮을 것입니다. 데이터베이스는

칼 :-) 당신을 위해