在主线程/程序终止上运行方法?

时间:2015-09-28 03:04:26

标签: java terminate termination

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

我不想要这个:

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

3 个答案:

答案 0 :(得分:1)

只需添加一个关机钩..

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

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

当所有非deamon线程完成或调用System.exit()时,将调用shutdown hook。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

作为上述用户: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();
   }
  }