NIO学习(四):Java NIO的Selector核心类图
分类:
文章
•
2024-06-24 21:36:10
背景
- 整理NIO的Selector核心类的类体系结构图。
过程

- 不同操作系统有不同的JDK支持,本地是Windows。
- 关键点是抽象类Selector依赖SelectorProvider和SelectionKey。
小结
- Selector的open()方法,是JDK源码SelectorProvider调用provider()方法返回Selector实例。
- 后续Channel使用register(Selector selector, OP_REDA),第二参数是感兴趣的事件。这里实际是把channel注册到Selector上,这个时候会生成SelectionKey实例。
- 后续Selector在死循环线程中,调用select()方法一直在监听Channle中是否有事件发生,它不是主动轮询各个Channle,它是监听是否有连接事件发生,是否有读的事件发生,是否有写的事件发生。一旦有事件发生,则存在SelectedKey,通过这个key去找到对应的Channle,因为每个channle有个对应的ChannelPipline(Netty中的概念),这个管道中有很多使用双向链表连接起来的handler,每个handler都处理自己感兴趣的事件,比如Inbound类型,Ountboud类型,比如日志类型,比如具体的开发者实现的业务逻辑。一旦这个感兴趣的事件处理完成,则需要把SelectedKey给移除掉,等待下次事件的到来。