模块  java.base
软件包  java.nio.channels.spi

Class AbstractSelector

  • 实现的所有接口
    CloseableAutoCloseable

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

    该类封装了实现选择操作中断所需的低级机器。 具体的选择器类必须分别在调用可能无限期阻塞的I / O操作之前和之后调用beginend方法。 为了确保始终调用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错误
      • provider

        public final SelectorProvider provider()
        返回创建此通道的提供程序。
        Specified by:
        provider ,类 Selector
        结果
        创建此渠道的提供商
      • 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操作的开始。

        应使用try ... finally块与end方法一起调用此方法,如图above所示,以实现此选择器的中断。

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

      • end

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

        此方法应与begin方法一起使用try ... finally调用 ,如图above所示,以实现此选择器的中断。