模块 java.base

类 AbstractSelectableChannel

所有已实现的接口:
Closeable , AutoCloseable , Channel , InterruptibleChannel
已知子类:
DatagramChannel , Pipe.SinkChannel , Pipe.SourceChannel , SctpChannel , SctpMultiChannel , SctpServerChannel , ServerSocketChannel , SocketChannel

public abstract class AbstractSelectableChannel extends SelectableChannel
可选通道的基本实现类。

此类定义处理通道注册、注销和关闭机制的方法。它维护此通道的当前阻塞模式及其当前的选择键集。它执行实现 SelectableChannel 规范所需的所有同步。此类中定义的受保护抽象方法的实现不需要与可能参与相同操作的其他线程同步。

自从:
1.4
  • 构造方法详细信息

    • AbstractSelectableChannel

      protected AbstractSelectableChannel(SelectorProvider  provider)
      初始化此类的新实例。
      参数:
      provider - 创建此通道的提供商
  • 方法详情

    • provider

      public final SelectorProvider  provider()
      返回创建此通道的提供者。
      指定者:
      provider 在类 SelectableChannel
      返回:
      创建此通道的提供商
    • isRegistered

      public final boolean isRegistered()
      从类复制的描述:SelectableChannel
      告知此通道当前是否已向任何选择器注册。新建通道未注册。

      由于密钥取消和通道注销之间固有的延迟,一个通道在其所有密钥都被取消后可能会保持注册状态一段时间。通道在关闭后也可能会保留一段时间的注册状态。

      指定者:
      isRegistered 在类 SelectableChannel
      返回:
      true 当且仅当此通道已注册
    • keyFor

      public final SelectionKey  keyFor(Selector  sel)
      从类复制的描述:SelectableChannel
      检索代表通道向给定选择器注册的键。
      指定者:
      keyFor 在类 SelectableChannel
      参数:
      sel - 选择器
      返回:
      上次使用给定选择器注册此通道时返回的键,如果此通道当前未使用该选择器注册,则返回 null
    • register

      public final SelectionKey  register(Selector  sel, int ops, Object  att) throws ClosedChannelException
      使用给定的选择器注册此通道,返回一个选择键。

      此方法首先验证此通道是否打开以及给定的初始兴趣集是否有效。

      如果此通道已经注册到给定的选择器,则在将其兴趣集设置为给定值后,将返回代表该注册的选择键。

      否则,此通道尚未向给定的选择器注册,因此在持有适当的锁的同时调用选择器的 register 方法。生成的密钥在返回之前被添加到该通道的密钥集中。

      指定者:
      register 在类 SelectableChannel
      参数:
      sel - 要注册此通道的选择器
      ops - 为结果键设置的兴趣
      att - 结果密钥的附件;可能是null
      返回:
      表示使用给定选择器注册此通道的键
      抛出:
      ClosedSelectorException - 如果选择器关闭
      IllegalBlockingModeException - 如果此通道处于阻塞模式
      IllegalSelectorException - 如果此通道不是由与给定选择器相同的提供商创建的
      CancelledKeyException - 如果此通道当前已注册给定选择器但相应的密钥已被取消
      IllegalArgumentException - 如果 ops 集合中的某个位不对应于此通道支持的操作,即,如果 set & ~validOps() != 0
      ClosedChannelException - 如果此通道关闭
    • implCloseChannel

      protected final void implCloseChannel() throws IOException
      关闭此通道。

      此方法在 AbstractInterruptibleChannel 类中指定并由 close 方法调用,进而调用 implCloseSelectableChannel 方法以执行关闭此通道的实际工作。然后取消该通道的所有密钥。

      指定者:
      implCloseChannel 在类 AbstractInterruptibleChannel
      抛出:
      IOException - 如果在关闭通道时发生 I/O 错误
    • implCloseSelectableChannel

      protected abstract void implCloseSelectableChannel() throws IOException
      关闭这个可选择的通道。

      此方法由 close 方法调用,以执行关闭通道的实际工作。只有在通道尚未关闭时才会调用此方法,并且永远不会调用多次。

      此方法的实现必须安排在此通道上的 I/O 操作中阻塞的任何其他线程立即返回,方法是抛出异常或正常返回。

      抛出:
      IOException - 如果发生 I/O 错误
    • isBlocking

      public final boolean isBlocking()
      从类复制的描述:SelectableChannel
      告知此通道上的每个 I/O 操作是否都将阻塞直到完成。新创建的通道始终处于阻塞模式。

      如果此通道已关闭,则未指定此方法返回的值。

      指定者:
      isBlocking 在类 SelectableChannel
      返回:
      true 当且仅当此通道处于阻塞模式时
    • blockingLock

      public final Object  blockingLock()
      从类复制的描述:SelectableChannel
      检索 configureBlocking register 方法同步的对象。这在实现需要在短时间内保持特定阻塞模式的适配器时通常很有用。
      指定者:
      blockingLock 在类 SelectableChannel
      返回:
      阻塞模式锁对象
    • configureBlocking

      public final SelectableChannel  configureBlocking(boolean block) throws IOException
      调整此通道的阻塞模式。

      如果给定的阻塞模式不同于当前的阻塞模式,则此方法会调用 implConfigureBlocking 方法,同时持有适当的锁,以更改模式。

      指定者:
      configureBlocking 在类 SelectableChannel
      参数:
      block - 如果 true 那么这个通道将被置于阻塞模式;如果false那么它将被置于非阻塞模式
      返回:
      这个可选择的通道
      抛出:
      ClosedChannelException - 如果此通道关闭
      IOException - 如果发生 I/O 错误
    • implConfigureBlocking

      protected abstract void implConfigureBlocking(boolean block) throws IOException
      调整此通道的阻塞模式。

      此方法由 configureBlocking 方法调用,以执行更改阻塞模式的实际工作。仅当新模式与当前模式不同时才会调用此方法。

      参数:
      block - 如果 true 那么这个通道将被置于阻塞模式;如果false那么它将被置于非阻塞模式
      抛出:
      IOException - 如果发生 I/O 错误