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事件
posted @   鸭梨的药丸哥  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示