当密钥集的大小为0时,选择器的默认行为是什么?

时间:2011-04-13 07:42:18

标签: java css-selectors nio

只是想知道当密钥集为0时,Java中Selector的正常行为是什么,因为它本质上是一个无意义的操作(没有可供选择的密钥)。即使密钥设置为0,也可能无论如何都会发生操作。但是,是否可以在选择期间注册通道密钥并在选择期间重新评估操作?

如果不是这种情况,那么没有键的选择操作肯定会花费无限的时间吗?在这种情况下,其他网络代码会发生什么? :)也许这只是一个确保密钥集永远不会为0的情况。但我想知道,因为我已经编写了一个选择器,需要确保它符合官方行为。

1 个答案:

答案 0 :(得分:1)

Selector类是抽象的,实际操作取决于Selector实际返回的SelectorProvider实现类型。这取决于操作系统。

如果实现使用Sun的sun.nio.ch.SelectorImpl作为基类(它也是抽象的),那么可以观察到select()方法在调用抽象{{1}之前在公钥上同步} 方法。 doSelect()方法也在公钥上同步,因此寄存器肯定可能必须等待选择,而选择将永远不会完成,因为没有注册。

不幸的是,这是所有抽象类,所以我们无法确定。我确实观察到register()文档描述了如何解开卡在Selector中的线程,因此可能会出现经常值得记录的内容,因此您可以担心。