public abstract class AbstractSelectableChannel extends SelectableChannel
这个类定义了处理通道注册,注销和关闭的机制的方法。 它保持该通道的当前阻塞模式以及其当前的选择键组。 它执行实现SelectableChannel
规范所需的所有同步。 在此类中定义的抽象受保护方法的实现不需要与可能从事相同操作的其他线程同步。
Modifier | Constructor and Description |
---|---|
protected |
AbstractSelectableChannel(SelectorProvider provider)
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
Object |
blockingLock()
检索
configureBlocking 和
register 方法同步的对象。
|
SelectableChannel |
configureBlocking(boolean block)
调整此频道的屏蔽模式。
|
protected void |
implCloseChannel()
关闭此频道。
|
protected abstract void |
implCloseSelectableChannel()
关闭此可选择的频道。
|
protected abstract void |
implConfigureBlocking(boolean block)
调整此频道的屏蔽模式。
|
boolean |
isBlocking()
告诉这个通道上的每个I / O操作是否会阻塞直到完成。
|
boolean |
isRegistered()
告知这个频道当前是否在任何选择器上注册。
|
SelectionKey |
keyFor(Selector sel)
检索表示频道注册的键与给定的选择器。
|
SelectorProvider |
provider()
返回创建此通道的提供程序。
|
SelectionKey |
register(Selector sel, int ops, Object att)
使用给定的选择器注册此频道,返回一个选择键。
|
register, validOps
begin, close, end, isOpen
protected AbstractSelectableChannel(SelectorProvider provider)
provider
- 创建此频道的提供商
public final SelectorProvider provider()
provider
在
SelectableChannel
public final boolean isRegistered()
SelectableChannel
复制
由于键取消和通道注销之间的固有延迟,在所有键被取消之后,频道可能会保留一段时间。 通道关闭后也可能会保留一段时间。
isRegistered
在
SelectableChannel
public final SelectionKey keyFor(Selector sel)
SelectableChannel
keyFor
在
SelectableChannel
sel
- 选择器
public final SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
该方法首先验证该通道是否打开,并且给定的初始兴趣集合是有效的。
如果该通道已经向给定的选择器注册,那么在将其兴趣设置为给定值之后,返回表示该注册的选择键。
否则,该通道尚未注册到给定的选择器,因此在保持适当的锁定的同时调用选择器的register
方法。 生成的密钥将在返回之前添加到此通道的密钥集中。
register
在类
SelectableChannel
sel
- 要注册该频道的选择器
ops
- 为所得密钥设置的兴趣
att
- 所得密钥的附件;
可能是null
ClosedSelectorException
- 如果选择器已关闭
IllegalBlockingModeException
- 如果此通道处于阻塞模式
IllegalSelectorException
- 如果此通道不是由与给定选择器相同的提供程序创建的
CancelledKeyException
- 如果此通道当前已注册到给定的选择器,但相应的键已被取消
IllegalArgumentException
- 如果
ops设置中的某一位与此通道支持的操作不对应,也就是说,如果
set & ~validOps() != 0
ClosedChannelException
- 如果此通道关闭
protected final void implCloseChannel() throws IOException
该方法在AbstractInterruptibleChannel
类中指定并由close
方法调用,依次调用implCloseSelectableChannel
方法,以执行关闭此通道的实际工作。 然后取消所有此频道的密钥。
implCloseChannel
在
AbstractInterruptibleChannel
IOException
- 如果在关闭通道时发生I / O错误
protected abstract void implCloseSelectableChannel() throws IOException
该方法由close
方法调用,以执行关闭通道的实际工作。 该方法仅在通道尚未关闭的情况下被调用,并且不会多次调用。
该方法的实现必须安排在该通道上被I / O操作阻塞的任何其他线程立即返回,通过抛出异常或返回正常。
IOException
- 如果发生I / O错误
public final boolean isBlocking()
SelectableChannel
如果此通道关闭,则此方法返回的值未指定。
isBlocking
在
SelectableChannel
public final Object blockingLock()
SelectableChannel
复制
configureBlocking
和register
方法同步的对象。
这在实现需要在短时间内保持特定阻塞模式的适配器通常是有用的。
blockingLock
在类
SelectableChannel
public final SelectableChannel configureBlocking(boolean block) throws IOException
如果给定阻塞模式与当前阻塞模式不同,则该方法调用implConfigureBlocking
方法,同时保持适当的锁,以便更改模式。
configureBlocking
在类
SelectableChannel
block
- 如果true那么这个通道将被置于阻塞模式;
如果false那么它将被放置为非阻塞模式
ClosedChannelException
- 如果此通道关闭
IOException
- 如果发生I / O错误
protected abstract void implConfigureBlocking(boolean block) throws IOException
该方法由configureBlocking
方法调用,以便执行更改阻塞模式的实际工作。 仅当新模式与当前模式不同时才调用此方法。
block
- 如果true那么该通道将被置于阻塞模式;
如果false那么它将被放置为非阻塞模式
IOException
- 如果发生I / O错误