java - 在 shutdown hook 期间关闭 I/O 流

标签 java io shutdown-hook

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

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

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

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

最佳答案

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

但是你正在做的事情是完全没有必要的。无论如何,客户端都会收到流结束。这就是它所需要的。

关于java - 在 shutdown hook 期间关闭 I/O 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23748797/

相关文章:

mysql - 如何更改mysql表的物理顺序?

java - 对顺序访问的文件使用内存映射有什么好处吗?

java - 运行多线程的 JVM 如何处理 ctrl-c、w/和 w/o 关闭 Hook ?

java - 在应用程序关闭时刷新打印机

java - 两台服务器共享数据库

java - Java 中的 mouseMove() 问题

c++ - 使用动态分配的内存(指针)

Java 资源作为文件

java - Java中如何恢复被正则表达式分割的字符串