第6章 非阻塞通信.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 非阻塞通信

java.nio包中基础类-Selector Selector(监听器)负责监听ServerSocketChannel和SocketChannel向它注册的事件。 Selector允许以单线程的方式来处理多个 Channel。如果当前应用中打开了多个连接(通道),可以将这多个通道注册到一个Selector上。 java.nio包中基础类-Selector 一个Selector对象包含2种常用类型的SelectionKey集合。 all-keys: SetSelectionKey keys() 返回该监听器的所有selectionkey (2) selected-keys: SetSelectionKey selectedKeys() 返回该监听器的所有已发生的selectionkey java.nio包中基础类-Selector 主要方法: static Selector open() throws IOException (2) boolean isOpen() Selector对象一经创建就处于打开状态。 (3) void close() throws IOException 与之关联的SelectionKey对象会被取消。 (4) int selectNow() throws IOException 采用非阻塞模式返回当前相关事件已经发生的SelectionKey对象的数目。如果没有立即返回0。 java.nio包中基础类-Selector (5) int select() throws IOException int select(long timeout) throws IOException 采用阻塞工作模式,返回相关事件已经发生的SelectionKey对象的数目。直到以下情况之一发生,才从select()方法返回。 至少有一个SelectionKey的相关事件已经发生。 其他线程调用了Selector的wakeup()方法。 当前执行select()方法的线程被其他线程中断。 超出了等待时间。时间由timeout设定。 (6) Selector wakeup() 唤醒执行select()方法的线程。被唤醒的线程再次执行select()方法时仍就按照阻塞模式工作。 java.nio包中基础类-SelectionKey SelectionKey对象跟踪注册事件的句柄。在SelectionKey对象有效期间,Selector会一直监控与SelectionKey对象相关的事件,如果事件发生,就会把SelectionKey对象加入到selected-key集合中。以下情况SelectionKey对象失效。 调用SelectionKey的cancel()方法 关闭与SelectionKey关联的Channel 与SelectionKey关联的Selector关闭 SelectionKey定义的4种事件: SelectionKey.OP_ACCEPT 常量值16 SelectionKey.OP_CONNET 常量值8 SelectionKey.OP_READ 常量值1 SelectionKey.OP_WRITE 常量值4 java.nio包中基础类-SelectionKey 主要方法 (1) SelectableChannel channel() 返回与该键值对应的通道 (2) Selector selector() 返回与该键值对应的选择器 (3) boolean isValid() 判断该键值是否有效,键在创建时是有效的,并在被取消、其通道已关闭或者其选择器已关闭之前保持有效。 (4) int interestOps() 返回此键感兴趣的事件所对应的值 (5) SelectionKey interestOps(int ops) 为该键注册感兴趣的事件。并返回当前SelectionKey对象本身的引用,相当于 return this。 java.nio包中基础类-SelectionKey (6) int readyOps() 返回与此键对应的已准备就绪的事件 (7) final boolean isReadable() 判断此键对应的通道是否已准备好进行读操作。 (8)final boolean isWritable() 判断此键对应的通道是否已准备好进行写操作。 (9) final boolean isConnectable() 判断此键对应的通道是否已完成其套接字连接操作。 (10)

文档评论(0)

sh4125733 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档