我正在用Java编写服务器 - 客户端应用程序,我希望服务器在客户端意外崩溃或关闭的情况下向客户端发送消息。
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
out.writeObject(new ServerQuit());
out.close();
}
}
其中out
是用于写入客户端的输出流,ServerQuit
表示服务器崩溃时发送的消息。
这样做安全吗? Javadocs说,人们不应该“盲目地依赖可能已经注册了自己的关闭钩子的服务,因此可能自己也在关闭过程中。”由于I / O流在JVM关闭时自动关闭,我的关闭钩子会工作吗?也就是说,在关闭钩子运行时,I / O流是否已经关闭?
答案 0 :(得分:0)
当JVM关闭时,I / O流不会'自动关闭。 操作系统关闭进程可能已打开的所有文件和套接字等,但这与JVM的任何操作无关。因此,在关闭挂钩运行时,您的流仍处于打开状态。
然而 您正在做的事情完全没必要。在任何情况下,客户端都将收到流的结束。这就是它所需要的一切。