java.nio.channels.spi

java.lang.Object
  继承者 java.nio.channels.Selector
      继承者 java.nio.channels.spi.AbstractSelector

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

构造方法摘要
protected AbstractSelector(SelectorProvider provider)
          初始化此类的一个新实例。
 
方法摘要
protected  void begin()
          标记可能无限期阻塞的 I/O 操作的开始。
protected  Set<SelectionKey> cancelledKeys()
          获取此选择器的已取消键集。
 void close()
          关闭此选择器。
protected  void deregister(AbstractSelectionKey key)
          从其通道的键集中移除给定的键。
protected  void end()
          标记可能无限期阻塞的 I/O 操作的结束。
protected abstract  void implCloseSelector()
          关闭此选择器。
 boolean isOpen()
          告知此选择器是否已打开。
 SelectorProvider provider()
          返回创建此通道的提供者。
protected abstract  SelectionKey register(AbstractSelectableChannel ch, int ops, Object att)
          向此选择器注册给定的通道。
 
从类 java.nio.channels.Selector 继承的方法
keys, open, select, select, selectedKeys, selectNow, wakeup
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

AbstractSelector

protected AbstractSelector(SelectorProvider provider)
初始化此类的一个新实例。

方法详细信息

close

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

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

指定者:
Selector 中的 close
抛出:
IOException - 如果发生 I/O 错误

implCloseSelector

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

为了实际关闭选择器,由 close 方法调用此方法。仅在尚未关闭此选择器时才能调用此方法,并且只能调用一次。

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

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

isOpen

public final boolean isOpen()
从类 Selector 复制的描述
告知此选择器是否已打开。

指定者:
Selector 中的 isOpen
返回:
当且仅当此选择器已打开时才返回 true

provider

public final SelectorProvider provider()
返回创建此通道的提供者。

指定者:
Selector 中的 provider
返回:
创建此通道的提供者

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 方法。

如果调用某个线程的 interrupt 方法的同时该线程阻塞于选择器上的某个 I/O 操作中,则调用此方法来安排选择器的 wakeup 方法被调用。


end

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

为了实现此选择器的中断,应该使用上面所示的 try ... finally 块先后调用此方法和 begin 方法。