2015-01-07 9 views
0

일반
(비 데몬) 스레드가 실행중인 경우에도 Java 응용 프로그램을 닫을 수 있어야합니다. 자바에서도 가능합니까? 내가 인터페이스를 구현 외부 플러그인을로드 프레임 워크를 짓고 있어요
Java - 강제 종료 프로그램 (실행중인 스레드 사용)

이유 (기본 요청처럼 보인다 C++ 세계에서 오는). 종료하기 전에 각 플러그인에서 close() 함수를 호출하여 리소스를 모두 해제하고 스레드를 모두 중지 할 것을 기대합니다. 그러나 플러그인은 내 작업장의 여러 팀에 의해 구축 되었기 때문에 실제로 제어 할 수는 없으며 누군가가 응용 프로그램을 종료 상태로 둡니다.
나는 각 플러그인 close() 함수를 호출 한 후 자신의 문제입니다 그들의 자원의 관리를하지 않은 경우, 강제로 프로그램을 종료하고 싶습니다 ...

+5

System.exit (0); – Stefan

+1

@MarounMaroun'System.exit (int)'는 실행중인 스레드에 관계없이 JVM을 닫습니다. –

+1

이것은 해당 스레드에서'SIGKILL'을 사용하는 것과 같습니다. 그것은 마지막 도랑 노력이고, 그 구성 요소의 소유자는 소리 질러해야합니다. – chrylis

답변

1

프로그램이 시도 종료

System.exit(0); 

하고 resoureces을 해제하려는 경우

finalize(); 

시도는

3

내가 대신시키는 생각 모든 플러그인은 모든 곳에서 스레드를 생성합니다. 주 프로그램에 thread pool을 생성하고 플러그인에 Runnables 및 Callable을 제출할 가능성을 부여하는 것이 좋습니다. 이렇게하면 플러그인에서 동시 작업을 제어 할 수 있습니다. 즉, 100 개의 플러그인이있는 경우 100 개의 스레드가 없어야합니다.

일단 프로그램을 다시 시작하면 풀에서 shutdown을 호출하여 플러그인 정리 작업에 리소스를 정리할 시간을줍니다. 타임 아웃도 정의 할 수 있습니다.

+0

(+1) 감사합니다. 실제로 며칠 전에이 방법을 사용하기 시작했습니다. 하지만 난 자신의 스레드를 계속 유지 플러그인을 막을 수 없다 ... –

+0

바이트 조작 라이브러리와 함께 할 수 있습니다! 예 : aspect 지향 프로그래밍을 사용하면 "new Thread()"를 대상으로 할 수 있습니다. 그런 다음 런타임 예외가 발생하도록 변경할 수 있습니다. 당신은 아마 모든 팀과 협의해야 할 것입니다. –