1. 程式人生 > >Java程式優雅關閉的兩種方式

Java程式優雅關閉的兩種方式

使用java編寫大型系統時,往往需要在程式被kill時將記憶體中的一些臨時資料和狀態處理掉,這裡稱之為優雅關閉。介紹兩種比較典型的方法:

1. 呼叫Runtime.getRuntime().addShutdownHook()方法,新增結束時執行的執行緒。

public void stopGracefully() {
       
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
               
            }
        });
}

2. 實現SignalHandler

public class KillHandler implements SignalHandler {
 
    public void registerSignal(String signalName) {
        Signal signal = new Signal(signalName);
        Signal.handle(signal, this);
    }
 
    @Override
    public void handle(Signal signal) {
       
        if (signal.getName().equals("TERM")) {
                //
        } else if (signal.getName().equals("INT") || signal.getName().equals("HUP")) {
                //
        } else {
                //
        }
    }
 
}

        程式啟動時例項化一個KillHandler,註冊TERM訊號。         KillHandler killHandler = new KillHandler();         killHandler.registerSignal("TERM");         這樣,在程序被kill的時候就會觸發KillHandler的handle方法。

3. 區別          兩種方法的區別在於,第一種方法在程序被kill的時候main函式就已經結束了,僅會執行shutdownHook中run()方法的程式碼。     而第二種方法中handle函式會在程序被kill時收到TERM訊號,對main函式的執行不會有任何影響,我們需要自己在main函式中添加布爾型別的flag,當收到TERM訊號時修改該flag,程式便會正常結束。 ---------------------  作者:debug_myself  來源:CSDN  原文:https://blog.csdn.net/carlislelee/article/details/52688693  版權宣告:本文為博主原創文章,轉載請附上博文連結!