java.lang.Object java.nio.channels.Selector java.nio.channels.spi.AbstractSelector
public abstract class AbstractSelector
选择器的基本实现类。
此类封装了实现中断选择操作所需的低级别机制。在调用可能无限期阻塞的 I/O 操作之前和之后,具体的选择器类必须分别调用 begin
和 end
方法。为了确保始终能够调用 end
方法,应该在 try ... finally 块中使用这些方法:
try { begin(); // Perform blocking I/O operation here ... } finally { end(); }
此类还定义了用于维护选择器的已取消键集和从其通道的键集中移除键的方法,并且为了执行实际的通道注册工作,还声明了由可选择通道的 register
方法所调用的抽象 register
方法。
构造方法摘要 | |
---|---|
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 |
构造方法详细信息 |
---|
protected AbstractSelector(SelectorProvider provider)
方法详细信息 |
---|
public final void close() throws IOException
如果已关闭该选择器,则此方法立即返回。否则它会将该选择器标记为已关闭,然后调用 implCloseSelector
方法以完成关闭操作。
IOException
- 如果发生 I/O 错误
protected abstract void implCloseSelector() throws IOException
为了实际关闭选择器,由 close
方法调用此方法。仅在尚未关闭此选择器时才能调用此方法,并且只能调用一次。
此方法的实现必须安排阻塞于此选择器上选择操作中的所有其他线程立即返回,就像调用 wakeup
方法一样。
IOException
- 如果关闭选择器的同时发生 I/O 错误
public final boolean isOpen()
public final SelectorProvider provider()
protected final Set<SelectionKey> cancelledKeys()
仅应在该键集上实现同步后才能使用它。
protected abstract SelectionKey register(AbstractSelectableChannel ch, int ops, Object att)
为了实际向此选择器注册通道,由该通道的 register
方法调用此方法。
ch
- 要注册的通道
ops
- 初始的相关操作集,必须是有效的
att
- 所得键的初始附件
protected final void deregister(AbstractSelectionKey key)
必须由选择器为所注销的每个通道调用此方法。
key
- 要移除的选择键
protected final void begin()
为了实现此选择器的中断,应该使用上面所示的 try ... finally 块先后调用此方法和 end
方法。
如果调用某个线程的 interrupt
方法的同时该线程阻塞于选择器上的某个 I/O 操作中,则调用此方法来安排选择器的 wakeup
方法被调用。
protected final void end()