栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java SelectableChannel虚拟类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java SelectableChannel虚拟类

文章目录
  • 总结
  • SelectableChannel虚拟类方法
  • register(Selector sel, int ops, Object att)方法详解
  • register方法可能引发的异常

总结
  1. SelectableChannel虚拟类是一种可通过Selector多路复用的通道,为了与选择器一起使用,必须首先通过register方法注册此类的实例。此方法返回一个新的SelectionKey对象,该对象表示频道在选择器中的注册,一旦向选择器注册,通道将保持注册状态,直到取消注册为止。这涉及取消选择器分配给通道的任何资源
  2. 通道不能直接注销,相反,代表其注册的密钥SelectionKey必须被取消。取消一个键要求在选择器的下一个选择操作期间取消注册通道。可以通过调用SelectionKey#cancel()方法显式取消键。当通道关闭时,无论是通过调用其Channel#close方法还是通过中断在通道上的I/O操作中阻塞的线程, 都会隐式取消通道的所有密钥
  3. 如果选择器Selector本身关闭,则通道将取消注册,表示其注册的密钥将立即失效。一个通道最多可以向任何特定选择器注册一次,可以通过调用isRegistered方法来确定是否向一个或多个选择器注册了通道。SelectableChannel可供多个并发线程安全使用
  4. SelectableChannel可以处于阻塞模式或非阻塞模式。在阻塞模式下,在通道上调用的每个I/O操作都将阻塞,直到完成为止。 在非阻塞模式下,I/O操作将永远不会阻塞,并且可能传输的字节数少于请求的字节数, 或者可能根本没有字节。可选择通道的阻塞模式可通过调用其isBlocking方法来确定
  5. 新创建的SelectableChannel始终处于阻塞模式,非阻塞模式与基于选择器的多路复用结合使用最为有用,在向选择器注册之前,通道必须置于非阻塞模式,并且在取消注册之前不得返回到阻塞模式
SelectableChannel虚拟类方法
方法名作用
abstract SelectorProvider provider()返回创建此通道的提供程序
abstract int validOps()返回标识此通道支持的操作的操作集,在此整数值中设置的位正好表示对此通道有效的操作,对于给定的具体通道类,此方法始终返回相同的值,此操作值含义具体在SelectionKey虚拟类中
abstract boolean isRegistered()判断此频道当前是否已向任何选择器注册,新创建的频道是未注册的
abstract SelectionKey keyFor(Selector sel)获取表示频道在给定选择器Selector中注册的密钥SelectionKey
abstract SelectionKey register(Selector sel, int ops, Object att)在给定选择器上注册此频道,并返回选择键SelectionKey, ops为兴趣集,即该通道感兴趣的事件,如连接建立事件,att是附件,放在SelectionKey中,方便以后取出来使用
final SelectionKey register(Selector sel, int ops)在给定选择器上注册此频道,并返回选择键,使用 register(Selector sel, int ops, Object att)实现只是传入的附件为null
abstract SelectableChannel configureBlocking(boolean block)调整此通道的阻塞模式,如果此通道已向一个或多个选择器注册,则尝试将其置于阻塞模式将导致抛出IllegalBlockingModeException
abstract boolean isBlocking()判断此通道上是否是阻塞模式,即通道上的每个I/O操作都将阻塞,新创建的通道默认为阻塞模式
register(Selector sel, int ops, Object att)方法详解
  1. 如果此频道当前已向给定选择器注册,则返回表示该注册的选择键SelectionKey。键的兴趣集将被更改为ops,就像调用SelectionKey#interestOps(int)方法一样。如果att参数不是null,则键的附件将被设置为该值。如果密钥SelectionKey已被取消,将抛出CancelledKeyException
  2. 如果该通道尚未向给定选择器注册,因此将注册该通道,并返回生成的新密钥。密钥的初始兴趣集为ops,其附件为att
  3. 可以随时调用此方法。如果在进行选择操作时调用此方法,则它对该操作没有影响, 下一次选择操作将看到密钥兴趣集的新注册或更改。如果在调用configureBlocking(boolean)的过程中调用此方法,则它将阻塞,直到调整通道的阻塞模式操作成功
  4. 如果此操作正在进行时关闭此通道,则此方法返回的密钥将被取消,因此无效
register方法可能引发的异常
异常名意义
ClosedChannelException如果通道关闭了
ClosedSelectorException如果选择器关闭了
IllegalBlockingModeException如果此通道处于阻塞模式,阻塞模式无法使用Selector选择器
IllegalSelectorException如果此通道不是由与给定选择器Selector相同的提供程序SelectorProvider创建的
CancelledKeyException如果此频道当前已在给定选择器中注册,但相应的键SelectionKey已被取消
IllegalArgumentException如果ops集中的某个位与此通道支持的操作不对应,即set & ~validOps() != 0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号