我正在编写Java应用程序,我希望它可以从外部关闭(我的意思是bash脚本,或python,或其他)。
但是简单地杀死应用程序并不合适。这是因为我有许多正在运行的线程,其中一些正在执行I/O
并且查杀可能导致写入数据处于不一致状态。所以我想要某种优雅的关闭。我发现的是:
import sun.misc.Signal;
import sun.misc.SignalHandler;
Signal.handle(new Signal("KILL"), new SignalHandler() {
public void handle(Signal sig) {
//Interrupt all threads and shutdown all services gracefully
}
});
但这是来自sun.misc
包,不是公共API。有没有更合适的方法来优雅地关闭Java应用程序?