key.cancel() 之后虽然能把 channel 设置成阻塞式
来源:10-16 使用nio模型重写connector

EverL
2019-11-14
key.cancel() 之后虽然能把 channel 设置成阻塞式,但是如果不使用新的线程,selector 是不是还会被 input\output 的操作阻塞?即 selector#select() 无法执行
写回答
1回答
-
Stannum
2019-12-02
同学你好~这里我们再强调一次,selector.select()是阻塞式调用,当注册在selector上的channel全都没有event发生时,select调用确实就是阻塞的,因为没有I/O事件可以处理。但是selector被读写操作阻塞这种说法就不正确了。我们在NIO模型中只有一个线程用来处理I/O操作,当有注册在selector上的channel触发了事件之后,我们在同一个线程中来处理所有的事件,然后我们的循环会接下来继续调用select()来等待下一次事件的发生~
00
相似问题