Java NIO之Selector
Java NIO之Selector
Selector常用方法
//创建selector
Selector selector = Selector.open();
//阻塞并等待就绪的通道的出现(select()方法返回的int值表示有多少通道已经就绪)
int readyNum = selector.select();
//阻塞等待timeout时间,若无就返回
int readyNum = selector.select(long timeout);
//非阻塞,只要有通道就绪就立刻返回就绪数量
int readyNum = selector.selectNow();
//选择就绪通道的选择键集合
Set<SelectionKey> selectedKeys = selector.selectedKeys();
//关闭选择器
selector.close();
interest集合
可以监听四种不同类型的事件:
- Connect (SelectionKey.OP_CONNECT)
- Accept (SelectionKey.OP_ACCEPT)
- Read (SelectionKey.OP_READ)
- Write (SelectionKey.OP_WRITE)
注册通道时可以指定监听事件
//将一个非阻塞通道注册到selector
channel.register(selector, Selectionkey.OP_READ);
也可以对多个时间进行监听
int interestSet = SelectionKey.OP_READ | SelectionKey.OP_WRITE;
//将一个非阻塞通道注册到selector
channel.register(selector, interestSet);
SelectionKey介绍
SelectionKey常用方法
key.attachment(); //返回SelectionKey的attachment,即捆绑的buffer
key.channel(); // 返回该SelectionKey对应的channel。
key.selector(); // 返回该SelectionKey对应的Selector。
//返回代表监控的IO操作的bit mask(如:SelectionKey.OP_CONNECT,突出:要监控)
key.interestOps();
// 返回一个bit mask,代表在相应channel上可以进行的IO操作。(突出:可以)
key.readyOps();
key.isAcceptable()//判断该SelectionKey是否触发Acceptable事件
key.isConnectable()//判断该SelectionKey是否触发Connectable事件
key.isReadable()//判断该SelectionKey是否触发Readabl事件
key.isWritable()//判断该SelectionKey是否触发Writable事件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)