我正在用Java編寫服務器 - 客戶端應用程序,並且我希望服務器在客戶端崩潰或意外關閉時向其發送消息。關閉鉤子期間關閉I/O流
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
out.writeObject(new ServerQuit());
out.close();
}
}
其中out
是用於寫入到客戶端的輸出流,並ServerQuit
表示發送在服務器崩潰時該消息。
這是安全嗎? Javadocs說,人們不應該「盲目地依賴可能已經註冊了自己的關閉鉤子的服務,因此可能會自己關閉服務。」由於I/O流在JVM關閉時自動關閉,我的關閉鉤子是否會工作?也就是說,在關閉鉤子運行時,I/O流是否已經關閉?
我很確定在發生崩潰的情況下,服務器只會*停止*。不能真正依靠任何東西來處理崩潰。 idk關於一個關機雖然... – awksp