Selector.close()是否关闭所有客户端套接字?

Mub*_*har 4 java sockets network-programming nio

我是nio套接字的新手,我使用nio套接字编写了一个服务器,现在我正在尝试编写shutdown hook以确保通过清理资源来优雅退出.

我的问题是Selector.close()方法关闭所有客户端套接字?如果没有,请告诉我如何访问所有客户端套接字,而无需单独列出它们.

Java Doc说跟随selector.close()方法

关闭此选择器.

如果一个线程当前在这个选择器的一个选择方法中被阻塞,那么它就像通过调用选择器的唤醒方法一样被中断.

仍然与此选择器关联的任何未取消的密钥无效,其通道被取消注册,并且释放与此选择器关联的任何其他资源.

如果此选择器已关闭,则调用此方法无效.

关闭选择器之后,除了通过调用此方法或wakeup方法之外,任何进一步尝试使用它都将导致抛出ClosedSelectorException.

上面的描述使用了"deregistered"这个词,它给人的感觉是它不会关闭套接字而只是从选择器中删除它们的映射.

use*_*421 7

不,它只关闭选择器.

在关闭选择器之前,可以通过Selector.keys()访问所有已注册的套接字密钥.