关于shutdownhook理解

时间:2012-08-11 06:44:53

标签: java

我正在经历java的关闭钩子功能,我的分析是..shutdownhook允许注册一个线程,该线程将立即创建但仅在JVM结束时启动!所以它是某种“全局jvm终结器”,你可以在这个线程中做出有用的东西(例如关闭像嵌入式hsqldb服务器这样的java资源)。这适用于System.exit(),或者使用CTRL-C / kill -15(但在unix上不能使用kill -9)。

请告知更多实际用途,如果可能的话,一个小例子将有助于使理解更清楚..!

1 个答案:

答案 0 :(得分:1)

当一个关闭钩子被添加到Runtime实例时,它被添加到一个Thread列表中,以便在JVM的干净终止时启动。

示例:使用关闭挂钩确保从系统托盘中删除java.awt.TrayIcon

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        try {
            if (SystemTray.isSupported()) {
                SystemTray.getSystemTray().remove(yourTrayIcon);
            }
        } catch (Exception e) {
            // failed to remove
            e.printStackTrace();
        }
    }
});

可以在offical documentation中阅读更多内容。