2013-02-15 1 views
0

웹 브라우저에서 오는 연결을 수신하는 다중 스레드 클라이언트 프로그램을 작성 중입니다. 내 문제는 브라우저에서 URL을 입력 할 때보다 많은 스레드가 생성된다는 것입니다. , 단 하나의 스레드를 만들어야하지만 내 경우에는 여러 스레드가 만들어집니다.요청한 것보다 많은 스레드 만들기

+1

컬렉션 당 여러 스레드가 만들어 졌다는 것을 어떻게 알 수 있습니까? JVM에서 "무료"로 얻는 백그라운드 스레드를 모두 보지 못하셨습니까? – Gray

+0

thread id가 – user1850254

+0

인데, thread-id가 1 이상입니까? thread-id는 얼마나 많은 스레드가 있는지를 어떻게 알 수 있습니까? – Gray

답변

3

표시된 코드는 들어오는 연결마다 하나의 스레드를 생성합니다. 더 이상은 없어.

기대하는 것보다 더 많은 스레드를 얻는다면 가장 확실한 설명은 웹 브라우저가 예상보다 많은 서버 연결을 여는 것입니다. 예를 들어 브라우저는 "사이트"에 대해 'favico'를 가져 오거나 GET을 시도하기 전에 HEAD를 보내려고 시도 할 수 있습니다.

또 다른 가능성은 사용자가보고있는 여분의 스레드가 JVM에 의해 생성 된 데몬 스레드라는 것입니다. 예 : 가비지 컬렉터 스레드, 파이널 라이저 스레드 등이 있습니다. 아니면 실제로 존재하지 않았을 수도 ... 그리고 당신은 뭔가를 오해하고 있습니다.


다른 점은 일반 TCP/IP 소켓을 사용하여 HTTP 서비스를 구현하는 것은 잘못된 아이디어라는 것입니다. HTTP를 제대로 구현하는 데는 많은 작업이 필요하며, 약간의 차이나 잘못한 결과가 발생하여 다른 브라우저와 잘 상호 운용되지 않는 서비스가 발생할 수 있습니다. 기존 HTTP "스택"을 사용하는 것이 좋습니다. 예 : 기존 웹 응용 프로그램 서버/프레임 워크 또는 Apache HttpComponents 스택 일 수 있습니다.

0

예를 들어 브라우저에 URL을 입력하면 하나의 스레드 만 만들어야하지만 제 경우에는 여러 스레드가 생성됩니다.

브라우저가 하나의 연결을 생성한다고 가정 할 경우에만. 당신은 그 사실을 모릅니다. 그리고 그 증거는 당신에게 불리합니다. URL에 의해 반환 된 데이터에 이미지에 대한 상대 URL이 포함되어있는 경우 브라우저는 추가 연결을 열어 동시에 검색합니다.

관련 문제