我正在編寫一個多線程的java控制檯應用程序,我打算通過Ctrl-C殺死它。在這種情況下,如果我有一個封裝單個線程的類,那麼關閉封裝類finalize方法中的子線程是一種很好的做法嗎?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關閉,所有線程也將死亡。 –
當然,但是它有傷害和/或是否存在有益的情況? –
在提供的示例中,就像在可能永遠不會執行的事情中添加努力一樣。 –