运行 main thread/program 终止的方法?

Run a method on main thread/program termination?

是否可以在主线程或整个程序终止时调用方法?我知道 Thread 的 .join() 方法,但我认为它不会在主线程上运行。例如,如果我创建一个临时目录,我想在程序终止时删除该临时目录,但我希望在程序终止时发生这种情况,而不是在 main 方法之类的东西之后。

我不想要这个:

public static void main() {
    ....Do something
    ....Delete temp directory
}

我看到了四种可能的方法。

  1. 使用您自己的 Thread 子类和重写的 运行() 方法。为线程终止添加一个 finally 块。 2.Use 具有类似装饰的 Runnable,可能作为提供的 Runnable 的包装器。它的一个变体是子类 Thread 以便在构造时应用这个包装器。 3.Create 第二个线程在真实线程上加入(),从而检测它的终止。 4.Use 重写 Thread.run() 方法的检测如上。

只需添加一个关闭钩子..

    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            System.out.println("ERMEHGERDDD");
        }
    });

来自 Javadoc:关闭挂钩只是一个已初始化但未启动的线程。当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩,并让它们 运行 并发。

关闭挂钩将在所有非后台线程完成时或如果调用 System.exit() 时调用。

作为用户:Mad Programmer mentioned above, you could use 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();
   }
  }