2008-10-17 3 views
4

Tomcat으로 호출을 확장해야하며 스레드를 내부적으로 시작하는 것이 좋습니다. 누구든지이 작업을 수행 할 필요가 있었습니까? 그렇다면 어떤 솔루션을 생각해 냈습니까?Java EE에서 여러 스레드를 어떻게 시작합니까?

+0

실제 달성하려는 내용에 대한 자세한 내용을 추가해야합니다. 장기 실행 작업, 동시성, 볼륨 ... – Robin

+0

나는 종종이 질문에 대해 궁금해했습니다. 응용 프로그램 서버에서 스레드를 시작하는 것이 "OK"입니까? 나는 권위있는 답변을 찾지 못했기 때문에 곧이 주제에 대한 좋은 문서가 될 것입니다. –

답변

1

귀하의 질문은 다소 모호합니다. Tomcat은 이미 스레드 풀을 사용하여 HTTP 요청을 처리합니다. Tomcat 구성을 통해 스레드 수를 늘릴 수 있습니다.이 정보는 Tomcat 위키를 참조하십시오. 당신이 당신의 코드에서 당신이 스레드를 시작하려는 것을 의미하는 경우

, 나는 자바 5에 도입 된 java.util.concurrent의 API를 숙독 조언한다 또한이에 텍스트입니다 "연습 자바 동시성"를 읽고 제목.

1

스레드로 해결하려는 문제는 무엇입니까?

장기 실행 작업이있는 경우 JMS + 전체 Java EE 컨테이너를 사용해야합니다.

초과로드를 처리하려는 경우 두 개의 tomcat 인스턴스를 고려할 수 있지만 http 세션을 사용하는 경우 세션 복제를 조사해야합니다.

Tomcat을 사용해야하는 경우 java.util.concurrency에서 Executors 프레임 워크를 사용해보십시오.

5

확장 성 향상을 위해 서버가 스레드를 관리해야하기 때문에 응용 프로그램 서버 내에 자체 스레드를 만드는 것은 일반적으로 권장되지 않습니다. 컨테이너가 보안 컨텍스트 (예 : 인증 된 주체)와 같이 스레드 컨텍스트에서 사용 가능한 것에 대해 가정 할 경우 문제가 발생할 수도 있습니다. 이는 일반적으로 스레드를 생성 한 다음 해당 컨테이너에서 알 수없는 해당 스레드의 서버 자원을 사용하는 경우에 발생합니다.

Tomcat에서 컨테이너 관리 스레드를 가져 오는 방법이 있는지 확인하십시오. WebLogic과 WebSphere는 commonj.WorkManager를 지원하므로 컨테이너 관리 스레드에 대한 작업을 예약 할 수 있습니다. Spring은 commonj도 사용할 수 있지만 Tomcat에서 지원되는지 여부는 확실하지 않다.

1

매우 구체적인 필요가 없다면 webapp 내에서 스레드를 실행해서는 안됩니다. 문제에 대한 세부 정보가 없으면 이것이 문제를 해결하기위한 올바른 접근 방법인지 알기가 어렵습니다.

당신은 " 가 통합, 또는 측면 거의 모든 J2EE 나 J2SE 응용 프로그램 함께 사용할 수있는 모든 기능을 갖춘 오픈 소스 작업 스케줄링 시스템입니다"하는 Quartz에서 살펴 봐야 할 수 있습니다

.

0

다른 사람들이 물어 본 것처럼, 성취하려는 내용에 대해 더 자세히 설명해야합니다.

그렇지 않으면 tomcat은 스레드 풀을 사용합니다. 풀의 스레드 수를 늘리십시오. 최신 버전의 tomcat - 6.x를 사용하십시오. Java 6.0_10을 사용하십시오. 필요한 경우 프로파일 러를 사용하여 응용 프로그램을 조정하고 필요한 경우 JVM 설정을 사용하여 응용 프로그램을 조정하십시오.

0

관리되는 다중 스레딩을위한 J2EE 추상화는 JCA입니다. 특히, WorkManager 및 Work 클래스를 살펴보십시오. this arcicle도 참조하십시오. Spring은 또한 JCA 기반의 작업 관리자 추상화를 제공한다.

관련 문제