在 Java 11 之前,已实现了 java.nio.channels.Selector API,以在使用 java.nio.channels.Selector.selectNow() 或 java.nio.channels.Selector.select() 时覆盖先前的准备信息。java.nio.channels.Selector.selectNow() 方法应根据规范清空已取消的键,但是 Java 11 之前的行为并未反映这一点。
规范指出,除非调用了 java.nio.channels.Selector.selectNow() 或 java.nio.channels.Selector.clear() 来清空已取消的键,否则不应覆盖准备信息,而是应持久存储这些信息。
在 Java 11 中,此行为已更改为遵循规范;如果添加了代码来解决之前的这一错误,那么可能需要进行更改。
有关 java.nio.channels.Selector 类的其他信息,请参阅 Class java.nio.channels.Selector Java 文档。
有关 JDK 11 中的更改的更多信息,请参阅 Release Notes in JDK 11。