java SelectableChannel虚拟类

java SelectableChannel虚拟类,第1张

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中注册的密钥SelectionKeyabstract 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)实现只是传入的附件为nullabstract SelectableChannel configureBlocking(boolean block)调整此通道的阻塞模式,如果此通道已向一个或多个选择器注册,则尝试将其置于阻塞模式将导致抛出IllegalBlockingModeExceptionabstract 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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5672044.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存