我正在制作一个简单的服务器,它将产生多个线程来处理多个客户端。我想知道在服务器终止时关闭和关闭所有各种流和线程的正确方法。
我添加了一个shutdownHook,它运行一个告诉服务器关闭的方法。反过来,服务器将关闭调用广播到它已打开的所有线程,这将每个线程中的“isClosed”布尔值设置为 true。
我所期待的是,每个线程在到达 run() 方法的末尾并再次循环时,都会遇到 while(!isClosed) 条件,从而通过关闭所有正确的套接字/流并返回来正确终止自己。
但是,我不知道这是否会正确关闭所有内容,因为程序应该在 shutdownhook 完成后终止。它完成得相当早,因为它所做的只是传播结束消息。这是否意味着某些线程没有足够的时间正确关闭?
如果是这样,最好的方法是让shutdownhook手动关闭每个线程,确保它们已经关闭,然后再返回?