java - 当键集大小为 0 时,选择器的默认行为是什么?

标签 java css-selectors nio

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

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

最佳答案

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

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

不幸的是,它都是抽象类,所以我们不能确定。我确实观察到,Selector 文档描述了如何解除卡在 select() 中的线程,因此大概它经常出现,值得记录,因此您的担心是正确的。

关于java - 当键集大小为 0 时,选择器的默认行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645932/

相关文章:

java - 使用 JNI 使用 Windows 命名管道的 Java 程序的 IPC

html - CSS - 模糊所有的 child ,除了悬停的 child ,当鼠标悬停在 child 身上时

java - 使用 servlet 3.1 异步 io 有什么真正的好处?

java - 在 Java 中列出文件的最快方法

java - 将文件从源复制到目标 java 时出错

java - jlink JRE 可以与外部 JAR 文件一起使用吗?

java - 使用 HashMap 比较两个字谜时出现编译错误

java - 如何使用 Lombok ?

CSS最大高度继承

css - 使用 aria-label 作为样式选择器的最佳实践