Java NIO之Selector

Java NIO之Selector


介绍

Selector选择器是java nio中能检测多个Channel通道,并能够知晓通道是否为诸如读写时间做好准备的组件。
即Selector相当于监控着注册在其上的所有Channel通道,主要是为了减少新建线程占用资源。

Selector必须要和非阻塞的管道结合使用,比如SocketChannel/ServerSocketChannel.不能和FileChannel管道一起使用,
因为FileChannel是阻塞模型,无法将其切换到非阻塞模型。

备注:Selector通常是在开发高性能网络编程时会使用。

Selector应用

    // 套接字管道
    SocketChannel socketChannel = SocketChannel.open();

    // 新建选择器
    Selector selector = Selector.open();

    // 配置/切换管道阻塞模型
    socketChannel.configureBlocking(false);

    // 将非阻塞管道注册到选择器中(指定选择器的监听事件类型)
    SelectionKey selectionKey = socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);

    /**
     * 四种监听事件类型(定义在SelectionKey中)
     * 
     * OP_READ 读取事件 <br>
     * OP_WRITE 写入事件<br>
     * OP_CONNECT 连接事件<br>
     * OP_ACCEPT 接收事件<br>
     * 
     * 
     * 通道触发了一个事件意思是该事件已经就绪。<br>
     * 
     * 所以,某个channel成功连接到另一个服务器称为“连接就绪”。<br>
     * 一个server socket channel准备好接收新进入的连接称为“接收就绪”。<br>
     * 一个有数据可读的通道可以说是“读就绪”。<br>
     * 等待写数据的通道可以说是“写就绪”。
     */

    // 备注:Selector有点像配置中心,同时它也提供监控功能,SelectionKey有点像具体的配置。

参考

1、http://ifeve.com/selectors/
2、http://blog.csdn.net/anders_zhuo/article/details/8535719

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值