2013-07-04 1 views
0

많은 프로젝트에서 공유 할 수있는 재사용 가능한 JAR을 만들고 싶습니다. 이 JAR에서는 특정 메소드가 호출 될 때 여러 스레드를 작성해야합니다.헤드리스 JAR이 메인 스레드에 종료 훅을 추가 할 수 있습니까?

이러한 스폰 된 스레드를 정상적으로 종료하는 데 도움이되는 종료 후크 (Runtime.addShutdownHook(...))를 추가하고 싶지만 "헤드리스"(main(String[]) 방법이 아님) JAR 파일에서이를 수행 할 수 있는지 확실하지 않습니다.

그래서 묻습니다. JAR의 모든 메소드가 "기본"스레드에 액세스하여 종료 훅을 추가 할 수 있습니까? 그렇다면 어떻게?

답변

0

종료 훅을 추가하기 위해 주 스레드에 액세스 할 필요가 없습니다. 코드를 스레드로 호출하고 종료 된 후크를 추가하기 위해 필요한 코드 만 호출하면됩니다.

이를 달성하는 한 가지 방법은 클래스에 정적 초기화 도구 블록을 사용하는 것입니다. 이렇게하면 클래스가로드/호출 될 때 이니셜 라이저가 실행되고 종료 훅이 추가됩니다. 호출 할 수있는 클래스가 여러 개있는 경우 모든 클래스가 가져 오는 단일 이니셜 라이저 클래스를 만들 수 있습니다.

또는 깨끗한 디자인은 스레드를 시작할 때 종료 훅을 추가 한 것일 수도 있습니다. 종료 훅이 아직 추가되지 않았 음을 확인하기 만하면됩니다 (AtomicBoolean은 검사로 사용하기에 충분해야합니다). 메모리 누수를 만들고 싶지 않습니다.

0

종료 훅을 추가 할 수 있도록 허용되는 제한 사항이 없으므로 의도 한대로 작동해야합니다. 코드가 후크를 삽입하지 못하도록하는 유일한 제한은 SecurityManager 일 수 있습니다. 따라서 프로젝트에 SecurityManager을 사용하지 않거나 코드에 후크를 추가 할 수있는 권한이 있는지 확인하십시오.

JVM이 종료되면 종료 훅이 실행되지 않을 수 있습니다.

관련 문제