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()来等待下一次事件的发生~

0
0

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程