Module java.base

Class AbstractSelector

java.lang.Object
java.nio.channels.Selector
java.nio.channels.spi.AbstractSelector
所有已实现的接口:
Closeable, AutoCloseable

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

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

    try {
        begin();
        // 在这里执行阻塞的 I/O 操作
        ...
    } finally {
        end();
    }

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

自 JDK 版本:
1.4
  • Constructor Details

    • AbstractSelector

      protected AbstractSelector(SelectorProvider provider)
      初始化此类的新实例。
      参数:
      provider - 创建此选择器的提供程序
  • Method Details

    • close

      public final void close() throws IOException
      关闭此选择器。

      如果选择器已经关闭,则此方法立即返回。否则,它将标记选择器为已关闭,然后调用 implCloseSelector 方法以完成关闭操作。

      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      指定者:
      close 在类 Selector
      抛出:
      IOException - 如果发生 I/O 错误
    • implCloseSelector

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

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

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

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

      public final boolean isOpen()
      从类中复制的描述: Selector
      告知此选择器是否打开。
      指定者:
      isOpen 在类 Selector
      返回:
      如果且仅如果此选择器打开,则返回 true
    • provider

      public final SelectorProvider provider()
      返回创建此通道的提供程序。
      指定者:
      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 操作的开始。

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

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

    • end

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

      应该与 begin 方法一起在 try ... finally 块中调用此方法,如上所示,以实现此选择器的中断。