我正在用 Java 编写服务器-客户端应用程序,我希望服务器在客户端崩溃或意外关闭时向客户端发送消息。
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
out.writeObject(new ServerQuit());
out.close();
}
}
whereout
是用于写入客户端的输出流,ServerQuit
表示服务器崩溃时发送的消息。
这样做安全吗?Javadocs 说人们不应该“盲目地依赖可能已经注册了自己的关闭钩子的服务,因此它们自己可能正在关闭过程中。” 由于 JVM 关闭时 I/O 流会自动关闭,所以我的关闭挂钩会起作用吗?也就是说,在关闭挂钩运行时,I/O 流是否已经关闭?