java - java NIO中取消注册并重新注册

标签 java nio

是否可以取消注册,然后使用相同的选择器再次注册? 我必须限制我接受的连接量并执行 key.cancel() 来停止接收 OP_ACCEPT 事件。

server.register(selector, SelectionKey.OP_ACCEPT);
...
key.cancel()
...

如果连接关闭,我无法再次运行register(..),得到一个 java.nio.channels.CancelledKeyException

register(..) 的 Javadoc :如果此 channel 当前已向给定选择器注册,但相应的键已被取消,则抛出 CancelledKeyException

实现我想要做的事情的方法是什么?

最佳答案

只需清除 key 的 interestOps 中您想要清除的位即可:例如 key.interestOps(0)

关于java - java NIO中取消注册并重新注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977016/

相关文章:

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?

java - 线程中的异常 "main"java.lang.IllegalArgumentException : bound must be positive

java - 支持 JAX-RS 2.0 和 WebLogic 12C

java - 将 LongBuffer/IntBuffer/ShortBuffer 转换为 ByteBuffer

java - 读取 Unix 中服务交换的 key

java - 我可以在同一个项目中同时包含 Apache Axis 1 和 2 库吗?

java - 被 java NIO Selector.select() 阻塞的线程应该被视为等待还是正在运行

java - 从批处理应用程序中的 Files.move 获取 java.nio.file.NoSuchFileException

java - 在 NTFS 上用 Java 创建稀疏文件

仅当远程 TCP 服务器关闭时,Java NIO 客户端才会导致文件描述符泄漏