Module  java.base
软件包  java.nio.channels.spi

Class AbstractSelector

  • All Implemented Interfaces:
    CloseableAutoCloseable


    public abstract class AbstractSelector
    extends Selector
    选择器的基本实现类。

    该类封装了实施选择操作中断所需的低级机器。 具体的选择器类必须分别调用beginend方法,调用可能无限期阻塞的I / O操作。 为了确保end方法总是被调用,这些方法应该在一个try ... finally块内使用:

     try {
         begin();
         // Perform blocking I/O operation here
         ...
     } finally {
         end();
     }

    该类还定义了方法,用于保持选择器的取消键集以及用于除去从其通道的键组中的键,并声明抽象register方法,其由可选择通道的调用register方法,以执行注册的信道的实际工作。

    从以下版本开始:
    1.4
    • 构造方法详细信息

      • AbstractSelector

        protected AbstractSelector​(SelectorProvider provider)
        初始化此类的新实例。
        参数
        provider - 创建此选择器的提供程序
    • 方法详细信息

      • implCloseSelector

        protected abstract void implCloseSelector​()
                                           throws IOException
        关闭此选择器。

        该方法由close方法调用,以执行关闭选择器的实际工作。 只有当选择器尚未关闭时,才会调用此方法,并且不会多次调用此方法。

        此方法的实现必须安排在选择操作中被阻止的任何其他线程立即返回,就像调用wakeup方法一样。

        异常
        IOException - 如果在关闭选择器时发生I / O错误
      • isOpen

        public final boolean isOpen​()
        描述从类别复制Selector
        告诉这个选择器是否打开。
        Specified by:
        isOpenSelector
        结果
        true如果,并且只有这个选择器是打开的
      • provider

        public final SelectorProvider provider​()
        返回创建此通道的提供程序。
        Specified by:
        providerSelector
        结果
        创建此频道的提供商
      • cancelledKeys

        protected final Set<SelectionKey> cancelledKeys​()
        检索此选择器的已取消键集。

        该集合只能在同步时使用。

        结果
        取消的密钥集
      • register

        protected abstract SelectionKey register​(AbstractSelectableChannel ch,
                                                 int ops,
                                                 Object att)
        使用此选择器注册给定通道。

        该方法由通道的register方法调用,以便执行此选择器注册通道的实际工作。

        参数
        ch - 要注册的频道
        ops - 初始利息集,必须是有效的
        att - 生成的密钥的初始附件
        结果
        表示给定频道注册的新密钥与此选择器
      • deregister

        protected final void deregister​(AbstractSelectionKey key)
        从其频道的密钥集中删除给定的密钥。

        该方法必须由选择器对每个要注销的通道进行调用。

        参数
        key - 要删除的选择键
      • begin

        protected final void begin​()
        标记可能无限期阻止的I / O操作的开始。

        应该使用end方法调用此方法,使用try ... finally块(如above所示),以实现此选择器的中断。

        如果在选择器上的I / O操作中线程被阻塞时调用线程的interrupt方法,则调用此方法将安排选择器的wakeup方法。

      • end

        protected final void end​()
        标记可能无限期阻止的I / O操作的结束。

        应使用begin方法调用此方法,使用try ... finally块(如above所示),以实现此选择器的中断。