请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

select在一些什么情况下会返回0,一些什么情况下会阻塞

以下图片中的注释是发送一条消息时,被打印出来的日志。
图片描述

网上很多资料说,当selectionKeys的size为0时,会导致select()方法阻塞,但上面的注释好像推翻了这一点。

为什么“ddd”消息发送后,readSelector.select()方法没有阻塞住,而且返回为0。

所以select方法何时返回0,何时被阻塞?

正在回答 回答被采纳积分+3

1回答

Qiujuer 2020-12-28 10:05:55

select() 不管是否有key都会被阻塞,至于返回0,有几种常见情况:

  1. 线程意外中断返回时,此时可能无就绪任务所以为0

  2. 当有新的事件需要注册时,需要对selector进行唤醒操作,唤醒操作会导致强制返回,此时若无就绪任务则也是0

  3. select可以指定超时时间,超时时也会返回,若无就绪任务也是0


所以其根本在于是否有就绪的任务。


0 回复 有任何疑惑可以回复我~
  • 提问者 PerryMore #1
    那请问阻塞会在什么时机下发生呢?
    回复 有任何疑惑可以回复我~ 2021-01-05 08:43:39
  • Qiujuer 回复 提问者 PerryMore #2
    调用select(),并且没有任何注册的事件就绪的时候。就会持续阻塞等待。
    回复 有任何疑惑可以回复我~ 2021-01-05 10:11:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信