在关闭挂钩期间关闭I / O流

时间:2014-05-19 23:33:46

标签: java io shutdown-hook

我正在用Java编写服务器 - 客户端应用程序,我希望服务器在客户端意外崩溃或关闭的情况下向客户端发送消息。

Runtime.getRuntime().addShutdownHook(new Thread(){
    public void run(){
        out.writeObject(new ServerQuit());
        out.close();
    }
}

其中out是用于写入客户端的输出流,ServerQuit表示服务器崩溃时发送的消息。

这样做安全吗? Javadocs说,人们不应该“盲目地依赖可能已经注册了自己的关闭钩子的服务,因此可能自己也在关闭过程中。”由于I / O流在JVM关闭时自动关闭,我的关闭钩子会工作吗?也就是说,在关闭钩子运行时,I / O流是否已经关闭?

1 个答案:

答案 0 :(得分:0)

当JVM关闭时,I / O流不会'自动关闭。 操作系统关闭进程可能已打开的所有文件套接字等,但这与JVM的任何操作无关。因此,在关闭挂钩运行时,您的流仍处于打开状态。

然而 您正在做的事情完全没必要。在任何情况下,客户端都将收到流的结束。这就是它所需要的一切。