选择器(Selector)是SelectableChannle 对象的多路复用器,Selector 可以同时监控多个SelectableChannel 的IO 状况,也就是说,利用Selector 可使一个单独的线程管理多个Channel。Selector 是非阻塞IO 的核心 。
选择器的创建
代码语言:javascript复制// 创建一个选择器
Selector selector = Selector.open();
绑定选择器
通过调用通道的register方法可以绑定选择器,register方法有两个参数
- Selector:即绑定哪个选择器
- ops:监听事件类型。ops有4个值可以选择,为SelectionKey的静态属性
// 让选择器监听一种状态
myChannel.register(selector, SelectionKey.OP_READ);
// 让选择器监听多种状态
myChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_ACCEPT);
SelectionKey
表示SelectableChannel 和Selector 之间的注册关系。每次向选择器注册通道时就会选择一个事件(选择键)。选择键包含两个表示为整数值的操作集。操作集的每一位都表示该键的通道所支持的一类可选择操作。