在编写一些测试代码时,我发现Selector.select()可以返回而不包含要处理的任何键的Selector.selectedKeys().当我注册一个accept()ed频道时,会发生这种情况
SelectionKey.OP_READ | SelectionKey.OP_CONNECT
作为感兴趣的业务.
根据文档,select()应该在以下时间返回:
1)有可以采取行动的渠道.
2)您明确调用Selector.wakeup() - 未选择任何键.
3)显式Thread.interrupt()执行select()的线程 - 没有选择键.
如果我在select()之后没有键,我必须在case(2)和(3)中.但是,我的代码不是调用wakeup()或interrupt()来启动这些返回.
关于是什么导致这种行为的任何想法?