public abstract class AbstractSelector extends Selector
该类封装了实施选择操作中断所需的低级机器。 具体的选择器类必须分别调用begin
和end
方法,调用可能无限期阻塞的I / O操作。 为了确保总是调用end
方法,这些方法应该在一个try ... finally块内使用:
try { begin(); // Perform blocking I/O operation here ... } finally { end(); }
该类还定义了用于维护选择器的取消密钥集合并从其信道的密钥集中去除密钥的方法,并声明由可选择的信道的register
方法调用的抽象register
方法,以便执行注册信道的实际工作。
Modifier | Constructor and Description |
---|---|
protected |
AbstractSelector(SelectorProvider provider)
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
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)
使用此选择器注册给定通道。
|
protected AbstractSelector(SelectorProvider provider)
provider
- 创建此选择器的提供程序
public final void close() throws IOException
如果选择器已经关闭,则该方法将立即返回。 否则它将选择器标记为关闭,然后调用implCloseSelector
方法以完成关闭操作。
close
中的
Closeable
close
在接口
AutoCloseable
close
在
Selector
IOException
- 如果发生I / O错误
protected abstract void implCloseSelector() throws IOException
该方法由close
方法调用,以执行关闭选择器的实际工作。 只有当选择器尚未关闭时,才会调用此方法,并且不会多次调用此方法。
该方法的实现必须安排在选择操作中被阻塞的任何其他线程立即返回,就好像通过调用wakeup
方法一样。
IOException
- 如果在关闭选择器时发生I / O错误
public final boolean isOpen()
Selector
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()
protected final void end()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.