- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)
您可能关注的文档
最近下载
- 通桥(2017)2101-Ⅱ时速160公里客货共线铁路预制后张法简支T梁24m.pdf
- 胡壮麟《语言学教程》(第5版)@第七章@复习笔记.pdf
- 2018年中级经济师考试《保险专业知识与实务》电子书.pdf VIP
- 公路收费站(所)风险管控清单.docx VIP
- 君正化工杜邦安全管理理念实施方案.pptx
- 在线网课学习课堂《空间句法与数据化设计——环境行为数据分析及设计应用》单元测试考核答案.docx
- 全面从严治党主体责任约谈资料汇编.docx VIP
- 2024年华为认证HCIA-5G(H35-660)考试题库(附答案).pdf VIP
- 《Web 程序设计》说课.ppt
- 数字经济-第1篇.pptx
文档评论(0)