java.lang.Object java.nio.channels.spi.AbstractInterruptibleChannel java.nio.channels.SelectableChannel java.nio.channels.spi.AbstractSelectableChannel
public abstract class AbstractSelectableChannel
可选择通道的基本实现类。
此类定义了处理通道注册、注销和关闭机制的各种方法。它会维持此通道的当前阻塞模式及其当前的选择键集。它执行实现 SelectableChannel
规范所需的所有同步。此类中所定义的抽象保护方法的实现不必与同一操作中使用的其他线程同步。
构造方法摘要 | |
---|---|
protected |
AbstractSelectableChannel(SelectorProvider provider) 初始化此类的一个新实例。 |
方法摘要 | |
---|---|
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) 向给定的选择器注册此通道,返回一个选择键。 |
从类 java.nio.channels.SelectableChannel 继承的方法 |
---|
register, validOps |
从类 java.nio.channels.spi.AbstractInterruptibleChannel 继承的方法 |
---|
begin, close, end, isOpen |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
从接口 java.nio.channels.Channel 继承的方法 |
---|
close, isOpen |
构造方法详细信息 |
---|
protected AbstractSelectableChannel(SelectorProvider provider)
方法详细信息 |
---|
public final SelectorProvider provider()
SelectableChannel
中的
provider
public final boolean isRegistered()
SelectableChannel
复制的描述
由于键取消和通道注销之间固有的延迟,所以在已取消某个通道的所有键后,该通道可能在一定时间内还会保持已注册状态。关闭通道后,该通道可能在一定时间内还会保持已注册状态。
SelectableChannel
中的
isRegistered
public final SelectionKey keyFor(Selector sel)
SelectableChannel
复制的描述
SelectableChannel
中的
keyFor
public final SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
此方法首先验证此通道是否已打开,以及给定的初始相关操作集是否有效。
如果已向给定的选择器注册了此通道,则在将其相关操作集设置为给定值后,返回表示该注册的选择键。
如果尚未向给定的选择器注册此通道,则在保持适当锁定的同时调用选择器的 register
方法。返回前将得到的键添加到此通道的键集中。
SelectableChannel
中的
register
sel
- 要向其注册此通道的选择器
ops
- 所得键的可用操作集
att
- 所得键的附件,可能为
null
ClosedChannelException
- 如果此通道已关闭
protected final void implCloseChannel() throws IOException
此方法在 AbstractInterruptibleChannel
类中指定并且由 close
方法调用,为了实际关闭此通道,此方法依次调用 implCloseSelectableChannel
方法。然后取消此通道的所有键。
AbstractInterruptibleChannel
中的
implCloseChannel
IOException
- 如果关闭通道的同时发生 I/O 错误
protected abstract void implCloseSelectableChannel() throws IOException
为了实际关闭此通道,由 close
方法调用此方法。仅在此通道尚未关闭时才能调用此方法,并且只能调用一次。
此方法的实现必须安排阻塞于此通道上 I/O 操作中的所有其他线程立即返回,要么抛出异常,要么正常返回。
IOException
public final boolean isBlocking()
SelectableChannel
复制的描述
如果此通道已关闭,则此方法返回的值是未指定的。
SelectableChannel
中的
isBlocking
public final Object blockingLock()
SelectableChannel
复制的描述
configureBlocking
和
register
方法实现同步的对象。在要求在短时间内维持特定阻塞模式的适配器实现中,这通常是很有用的。
SelectableChannel
中的
blockingLock
public final SelectableChannel configureBlocking(boolean block) throws IOException
如果给定的阻塞模式与当前的阻塞模式不同,那么为了改变该模式,此方法调用 implConfigureBlocking
方法,同时保持适当的锁定。
SelectableChannel
中的
configureBlocking
block
- 如果为
true,则此通道将被置于阻塞模式;如果为
false,则此通道将被置于非阻塞模式
ClosedChannelException
- 如果此通道已关闭
IOException
- 如果发生 I/O 错误
protected abstract void implConfigureBlocking(boolean block) throws IOException
为了执行实际的更改阻塞模式的工作,由 configureBlocking
方法调用此方法。仅在新模式与当前模式不同时才调用此方法。
IOException
- 如果发生 I/O 错误