是有可能有一個方法中,當主線程或整個程序終止被稱爲?我知道Thread的.join()方法,但我認爲它不會在主線程中工作。例如,如果我創建一個臨時目錄,我想在程序結束時刪除臨時目錄,但我想這種情況發生時,該程序將終止,像主要的方法後,沒有。在主線程/程序終止時運行一個方法?
我不希望這樣的:
public static void main() {
....Do something
....Delete temp directory
}
是有可能有一個方法中,當主線程或整個程序終止被稱爲?我知道Thread的.join()方法,但我認爲它不會在主線程中工作。例如,如果我創建一個臨時目錄,我想在程序結束時刪除臨時目錄,但我想這種情況發生時,該程序將終止,像主要的方法後,沒有。在主線程/程序終止時運行一個方法?
我不希望這樣的:
public static void main() {
....Do something
....Delete temp directory
}
隨着用戶:Mad Programmer上面提到的,你可以使用ShutdownHook。
public static void main(String[] args)
{
ShutdownHookThread shutdownHook = new ShutdownHookThread();
Runtime.getRuntime().addShutdownHook(shutdownHook);
}
private static class JVMShutdownHook extends Thread
{
public void run()
{
// tempDirectory.delete();
}
}
我看到四個可能的方法。
只需添加一個關閉掛鉤..
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("ERMEHGERDDD");
}
});
從的Javadoc:關閉鉤子只是一個初始化但尚未啓動的線程。當虛擬機開始其關閉序列時,它將以某種未指定的順序啓動所有已註冊的關閉掛鉤,並讓它們同時運行。當所有非守護進程線程結束
關閉掛接將被稱爲或者如果System.exit()的調用。
['運行#addShutdownHook'](https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#addShutdownHook-java.lang.Thread-) – MadProgrammer