欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java优雅退出

程序员文章站 2022-04-22 21:55:50
...

Java关闭时的回调

Runtime-ShutdownHook

  • 当在JVM崩溃,无法接收到信号量和kill -9 pid时无法执行。
  • 当存在多个ShutdownHook时,JVM无法保证它们执行的先后顺序
  • 在JVM关闭期间不能动态的添加或者去除ShutdownHook
  • 不能在Shutdownhook中调用System.exit(),它会卡住JVM,导致进程无法退出。
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
           @Override
           public void run() {
               System.err.println("Shutdown hook execute");
           }
       }));

Signal

  • 避免耗时操作,否则会阻塞线程。
  • 系统收到kill pid或者Ctrl+C时候退出
String osType = System.getProperties().getProperty("os.name").toLowerCase().startsWith("win") ?"INT":"TERM";
       Signal sig = new Signal(osType);
       Signal.handle(sig, new sun.misc.SignalHandler() {
           @Override
           public void handle(Signal signal) {
               System.err.println("Signal exit");
           }
       });
相关标签: javase java