Java NIO学习(三)Selector监听事件+NIO服务器实例

书接上文上一篇博客说了一下SelectionKey这个对象的一些常用属性,为这一篇文章的NIO服务器实例算是做了一些铺垫。不过在展示服务端实例代码之前,还要说几点细节上的东西。Selector如何选择就绪的通道//这个方法可能会阻塞,直到至少有一个已注册的事件发生,或者当一个或者更多的事件发生时selector.select();NIO明明是非阻塞的IO,为何会阻塞这是第一章Java NIO学习(
摘要由CSDN通过智能技术生成

书接上文

上一篇博客说了一下SelectionKey这个对象的一些常用属性,为这一篇文章的NIO服务器实例算是做了一些铺垫。不过在展示服务端实例代码之前,还要说几点细节上的东西。

Selector如何选择就绪的通道

//这个方法可能会阻塞,直到至少有一个已注册的事件发生,或者当一个或者更多的事件发生时
selector.select();

NIO明明是非阻塞的IO,为何会阻塞

这是第一章Java NIO学习(一)NIO相关概念中说的内容,作为非阻塞的IO操作,NIO为何会有这么一个可能会造成阻塞的方法呢,别急,selector对象有很多方法可以解决阻塞的问题!

//阻塞在select()方法上的线程也可以立刻返回,不阻塞
selector.selectNow();

//可以设置超时时间,防止进程阻塞
selector.select(long timeout);

//可以唤醒阻塞状态下的selector
selector.wakeup();

NIO服务端实例

本代码实例模拟一个游戏服务器,监听玩家上线的事件。

package nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterato
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值