스레드 관리 및 Spring Framework
다음 섹션의 정보를 사용하여 관리되지 않은 스레드 관련된 잠재적인 문제점을 피하십시오.
관리되지 않은 스레드
- 애플리케이션 서버가 관리되지 않은 스레드를 인식하지 않습니다.
- 관리되지 않은 스레드는 Java™ EE 컨텍스트 정보에 대한 액세스가 없습니다.
- 관리되지 않은 스레드는 애플리케이션 서버의 모니터링을 받지 않고 자원을 사용할 수 있습니다.
- 관리되지 않은 스레드는 시스템 종료 또는 장애로부터 자원 복구 등과 같이 애플리케이션 서버 기능에 부작용을 미칠 수 있습니다.
- 관리자는 관리되지 않은 스레드 수나 자원 사용을 제어할 수 없습니다.
- registerShutdownHook
Spring Framework AbstractApplicationContext 클래스 및 해당 서브클래스의 사용을 피하십시오. 이들 클래스에는 공용 메소드인 registerShutdownHook이 포함되어 있어서, 애플리케이션 컨텍스트를 닫기 위해 시스템 종료 시 실행하는 JVM(Java virtual machine)에서 스레드를 작성하고 등록합니다. 또는 애플리케이션이 애플리케이션 서버 컨테이너로부터 받아서 애플리케이션 컨텍스트에서 close 메소드를 명시적으로 호출하는 라이프사이클 주의사항을 사용할 수도 있습니다.
- WeakReferenceMonitor
Spring Framework는 EJB 컴포넌트의 개발 간소화를 위해 편리한 클래스를 제공합니다. 그러나 이러한 편리한 클래스는 WeakReferenceMonitor 오브젝트가 정리에 사용하는 관리되지 않은 스레드를 실행합니다.
스레드 풀링
WebSphere® Application Server는 비동기식으로 실행하기 위해 Spring Framework WorkManagerTaskExecutor 클래스의 사용을 지원합니다.
WorkManagerTaskExecutor 클래스는 애플리케이션 서버가 관리하는 스레드 풀을 사용하고 구성된 WorkManager 인스턴스로 위임합니다. 작업 관리자 구성에 대한 정보는 관련 항목을 참조하십시오.
Spring Framework와 함께 제공된 다른 TaskExecutor 클래스를 사용하지 마십시오. 이는 관리되지 않은 스레드를 시작할 수도 있기 때문입니다.
<bean id="myTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
스케줄링
Spring Framework에서 CommonJ WorkManager 스케줄링 패키지를 사용하여 애플리케이션 서버가 관리하는 스레드 관련 작업을 할 수 있습니다. JDK(Java SE Development Kit)에 있는 Quartz 스케줄러 또는 Timer 등과 같은 다른 패키지의 사용을 피하십시오. 이들은 관리되지 않은 스레드를 시작할 수 있기 때문입니다.