很简单,搞明白下面3个组件就行了
===== SelectionKey =====
聚合了 Selector, Channel, interestOps(感兴趣的事件) 信息
===== Selector =====
* 选择器,监听操作系统的读写状态是否ready。
* 记录了和自己相关的所有 SelectionKey。(多个channel可以注册到同一个Selector上)
* 如果自己关闭:触发所有和自己相关的Channle 自杀 (所以一个channel不能注册到多个channel上)
===== Channle (SocketChannel)=====
* 一个读写通道
* 记录了和自己相关的所有 SelectionKey
* 如果通道关闭:触发所有 SelectionKey.cancel()操作。告诉Selector和我这个channle相关的SelectionKey都失效了。后续不需要在监听这些事件了
nio例子参见 [[java_nio例子]]