public abstract class AbstractSelectableChannel
extends SelectableChannel
java.lang.Object | |||
↳ | java.nio.channels.spi.AbstractInterruptibleChannel | ||
↳ | java.nio.channels.SelectableChannel | ||
↳ | java.nio.channels.spi.AbstractSelectableChannel |
Known Direct Subclasses |
可选通道的基本实现类。
这个类定义了处理通道注册,取消注册和关闭的机制。 它保持此频道的当前阻止模式以及当前的一组选择键。 它执行实现SelectableChannel
规范所需的全部同步。 此类中定义的抽象保护方法的实现不需要与可能参与相同操作的其他线程同步。
Protected constructors |
|
---|---|
AbstractSelectableChannel(SelectorProvider provider) 初始化此类的新实例。 |
Public methods |
|
---|---|
final Object |
blockingLock() 检索 |
final SelectableChannel |
configureBlocking(boolean block) 调整此频道的屏蔽模式。 |
final boolean |
isBlocking() 告诉该通道上的每个I / O操作是否会阻塞,直到完成。 |
final boolean |
isRegistered() 确定此频道是否正在使用任何选择器进行注册。 |
final SelectionKey |
keyFor(Selector sel) 用给定的选择器检索表示通道注册的键。 |
final SelectorProvider |
provider() 返回创建此频道的提供商。 |
final SelectionKey |
register(Selector sel, int ops, Object att) 用给定的选择器注册此通道,返回选择键。 |
Protected methods |
|
---|---|
final void |
implCloseChannel() 关闭此频道。 |
abstract void |
implCloseSelectableChannel() 关闭此可选频道。 |
abstract void |
implConfigureBlocking(boolean block) 调整此频道的屏蔽模式。 |
Inherited methods |
|
---|---|
From class java.nio.channels.SelectableChannel
|
|
From class java.nio.channels.spi.AbstractInterruptibleChannel
|
|
From class java.lang.Object
|
|
From interface java.nio.channels.Channel
|
|
From interface java.nio.channels.InterruptibleChannel
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
AbstractSelectableChannel (SelectorProvider provider)
初始化此类的新实例。
Parameters | |
---|---|
provider |
SelectorProvider
|
Object blockingLock ()
检索configureBlocking
和register
方法同步的对象。 这在实现需要短时间维护特定阻塞模式的适配器时非常有用。
Returns | |
---|---|
Object |
The blocking-mode lock object |
SelectableChannel configureBlocking (boolean block)
调整此频道的屏蔽模式。
如果给定的阻塞模式与当前的阻塞模式不同,那么此方法调用 implConfigureBlocking
方法,同时保持适当的锁定,以便更改模式。
Parameters | |
---|---|
block |
boolean : If true then this channel will be placed in blocking mode; if false then it will be placed non-blocking mode |
Returns | |
---|---|
SelectableChannel |
This selectable channel |
Throws | |
---|---|
IOException |
boolean isBlocking ()
告诉该通道上的每个I / O操作是否会阻塞,直到完成。 新创建的频道始终处于阻止模式。
如果此通道关闭,则此方法返回的值未指定。
Returns | |
---|---|
boolean |
true if, and only if, this channel is in blocking mode |
boolean isRegistered ()
确定此频道是否正在使用任何选择器进行注册。 新创建的频道未注册。
由于密钥取消和频道注销之间的固有延迟,一个频道在其所有密钥被取消后可能会保留一段时间的注册。 频道在关闭后也可能会保留一段时间。
Returns | |
---|---|
boolean |
true if, and only if, this channel is registered |
SelectionKey keyFor (Selector sel)
用给定的选择器检索表示通道注册的键。
Parameters | |
---|---|
sel |
Selector
|
Returns | |
---|---|
SelectionKey |
The key returned when this channel was last registered with the given selector, or null if this channel is not currently registered with that selector |
SelectorProvider provider ()
返回创建此频道的提供商。
Returns | |
---|---|
SelectorProvider |
The provider that created this channel |
SelectionKey register (Selector sel, int ops, Object att)
用给定的选择器注册此通道,返回选择键。
此方法首先验证此通道是否打开,并且给定的初始兴趣集是否有效。
如果此通道已经注册给定的选择器,则表示该注册的选择键在将其兴趣设置为给定值之后返回。
否则,此通道尚未向给定的选择器注册,因此选择器的register
方法在保持适当的锁的同时被调用。 在返回之前,生成的密钥将添加到此频道的密钥集中。
Parameters | |
---|---|
sel |
Selector : The selector with which this channel is to be registered |
ops |
int : The interest set for the resulting key |
att |
Object : The attachment for the resulting key; may be null |
Returns | |
---|---|
SelectionKey |
A key representing the registration of this channel with the given selector |
Throws | |
---|---|
ClosedSelectorException |
|
IllegalBlockingModeException |
|
IllegalSelectorException |
|
CancelledKeyException |
|
IllegalArgumentException |
|
ClosedChannelException |
void implCloseChannel ()
关闭此频道。
该方法在AbstractInterruptibleChannel
类中指定,并由close
方法调用,然后调用implCloseSelectableChannel
方法以执行关闭此通道的实际工作。 然后取消所有这个频道的密钥。
Throws | |
---|---|
IOException |
void implCloseSelectableChannel ()
关闭此可选频道。
该方法由close
方法调用,以执行关闭通道的实际工作。 只有在通道尚未关闭的情况下才会调用此方法,并且不会多次调用该方法。
此方法的实现必须安排在该通道的I / O操作中阻塞的任何其他线程立即返回,或者通过抛出异常或正常返回。
Throws | |
---|---|
IOException |
void implConfigureBlocking (boolean block)
调整此频道的屏蔽模式。
该方法由configureBlocking
方法调用,以执行更改阻塞模式的实际工作。 只有当新模式与当前模式不同时才会调用此方法。
Parameters | |
---|---|
block |
boolean
|
Throws | |
---|---|
IOException |
If an I/O error occurs |