Ctrl-C를 사용하여 강제 종료하려는 다중 스레드 Java 콘솔 응용 프로그램을 작성 중입니다. 이 상황에서 단일 스레드를 캡슐화하는 클래스가있는 경우 캡슐화 클래스에서 자식 스레드를 종료하는 것이 좋습니다.자바는 자식 스레드 종료를 위해 finalize를 사용합니까?
원래 응용 프로그램을 Ctrl-C로 누르고 모든 스레드가 제대로 종료되지 않으면 원래 응용 프로그램의 아티팩트가 남아있을 수 있습니까?
의사 코드 :
public class ParentClass {
Thread childThread = new Thread(new ExampleRunnable());
@Override protected void finalize() throws Throwable {
childThread.shutdown();
}
}
public class ExampleRunnable implements Runnable {
private volatile boolean alive = false;
@Override
public void run() {
alive = true;
while(alive) {
//do some work
}
}
public void shutdown() {
alive = false;
}
}
finalize 메서드가 실행된다는 보장은 없습니다. 또한 모든 스레드가 JVM에 의해 제어된다는 점에 유의하십시오. JVM이 꺼지면 모든 스레드도 종료됩니다. –
물론, 그렇지만 상처를 입히거나 상상할 수있는 상황이 있습니까? –
제공된 예제에서는 결코 실행되지 않을 수도있는 노력을 추가하는 것과 같습니다. –