2012-04-25 3 views

답변

2

AsyncContext.start()는 새 스레드를 시작하지 않습니다. 거의 확실하게 컨테이너 스레드 (요청을 처리하는 데 사용 된 동일한 스레드 풀에서)를 사용합니다. 예를 들어, Tomcat은 항상 요청 처리 스레드 풀의 컨테이너 스레드를 사용합니다.

유스 케이스는 메인 스레드가 계속 진행하기 전에 Runnable에 넣을 내용을 기다리지 않아도되는 것을 원하지 않는 곳입니다.

제가 생각할 수있는 대부분의 예제는 오히려 인위적입니다. 그러나 5 개의 연결된 클라이언트와 함께 Servlet 3.0 비동기를 사용하여 구현 된 메시징 응용 프로그램이 있다면 기본 스레드는 5 개의 클라이언트 각각의 AsyncContext를 반복하여 호출 할 수 있습니다()를 사용하여 브로드 캐스트 메시지를 보냅니다. 그렇게하면 주 스레드가 느린 클라이언트에 의해 보류되지 않습니다.

+0

안녕하세요, 귀하의 답변에 감사드립니다. 그러나, 당신이 만드는 2 가지 포인트에 대한 충분한 정당성이나 증거가 없습니다 : # 1 : 합리적으로 빨리 완료 할 작업을위한 것; # 2 : 거의 확실하게 컨테이너 스레드를 사용합니다. # 2는 # 1의 합리적인 결과이므로 핵심 질문은 여전히 ​​남아 있습니다. 실제로 이것이 의도 된 유스 케이스인지 어떻게 알 수 있습니까? .start()는 스레드를 시작하는 관점에서 일반적인 것입니다. 문서에 그것이 수명이 짧을 것으로 예상된다는 힌트는 없습니다. 그래서 스레드를 시작하는 일반적인 방법은 설계자가 의도적으로 수명이 긴 임의의 스레드를 시작하도록 허용합니다. – necromancer

+0

# 1은 제가 지적한 것이 아니며 # 2는 사양에 명시되어 있으며 별도의 스레드 풀을 사용하면 명백한 이점이 없습니다. 대부분의 (모든?) 용기가 무엇입니까? –

+0

나는 풀이 단명하다고 생각했습니다. 그러나 나는 사양에서 더 읽을 것이다. – necromancer

관련 문제