- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
-
- java.nio.channels.spi.AbstractSelectableChannel
-
- All Implemented Interfaces:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel
- 已知直接子类:
-
DatagramChannel,Pipe.SinkChannel,Pipe.SourceChannel,SctpChannel,SctpMultiChannel,SctpServerChannel,ServerSocketChannel,SocketChannel
public abstract class AbstractSelectableChannel extends SelectableChannel
可选通道的基本实现类。这个类定义了处理通道注册,注销和关闭的机制的方法。 它保持该通道的当前阻塞模式以及其当前的选择键组。 它执行实现
SelectableChannel规范所需的所有同步。 在此类中定义的抽象受保护方法的实现不需要与可能从事相同操作的其他线程同步。- 从以下版本开始:
- 1.4
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedAbstractSelectableChannel(SelectorProvider provider)初始化此类的新实例。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 ObjectblockingLock()检索configureBlocking和register方法同步的对象。SelectableChannelconfigureBlocking(boolean block)调整此频道的屏蔽模式。protected voidimplCloseChannel()关闭此频道。protected abstract voidimplCloseSelectableChannel()关闭此可选择的频道。protected abstract voidimplConfigureBlocking(boolean block)调整此频道的屏蔽模式。booleanisBlocking()告诉这个通道上的每个I / O操作是否会阻塞直到完成。booleanisRegistered()告知这个频道当前是否在任何选择器上注册。SelectionKeykeyFor(Selector sel)检索表示频道注册的键与给定的选择器。SelectorProviderprovider()返回创建此通道的提供程序。SelectionKeyregister(Selector sel, int ops, Object att)使用给定的选择器注册此频道,返回一个选择键。-
Methods inherited from class java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class java.nio.channels.SelectableChannel
register, validOps
-
-
-
-
构造方法详细信息
-
AbstractSelectableChannel
protected AbstractSelectableChannel(SelectorProvider provider)
初始化此类的新实例。- 参数
-
provider- 创建此频道的提供商
-
-
方法详细信息
-
provider
public final SelectorProvider provider()
返回创建此通道的提供程序。- Specified by:
-
provider在SelectableChannel - 结果
- 创建此频道的提供商
-
isRegistered
public final boolean isRegistered()
描述从类别复制:SelectableChannel告知这个频道当前是否在任何选择器上注册。 新创建的频道未注册。由于键取消和通道注销之间的固有延迟,在所有键被取消之后,频道可能会保留一段时间。 通道关闭后也可能会保留一段时间。
- Specified by:
-
isRegistered在SelectableChannel - 结果
-
true如果,并且仅当该频道被注册
-
keyFor
public final SelectionKey keyFor(Selector sel)
描述从类别复制SelectableChannel检索表示频道注册的键与给定的选择器。- Specified by:
-
keyFor在SelectableChannel - 参数
-
sel- 选择器 - 结果
-
当该频道最后一次向给定选择器注册时返回该键,如果该频道当前未注册该选择器,则
null
-
register
public final SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
使用给定的选择器注册此频道,返回一个选择键。该方法首先验证该通道是否打开,并且给定的初始兴趣集合是有效的。
如果该通道已经向给定的选择器注册,那么在将其兴趣设置为给定值之后,返回表示该注册的选择键。
否则,此通道尚未注册到给定的选择器,因此在保持适当的锁定的同时调用选择器的
register方法。 生成的密钥将在返回之前添加到此通道的密钥集中。- Specified by:
-
register在SelectableChannel - 参数
-
sel- 要注册该通道的选择器 -
ops- 为结果键设置的兴趣 -
att- 结果密钥的附件; 可以是null - 结果
- 表示该通道与给定选择器的注册的键
- 异常
-
ClosedSelectorException- 如果选择器关闭 -
IllegalBlockingModeException- 如果此通道处于阻塞模式 -
IllegalSelectorException- 如果此频道并非与给定选择器相同的提供商创建 -
CancelledKeyException- 如果此通道当前已注册到给定的选择器,但相应的键已被取消 -
IllegalArgumentException- 如果ops集合中的某个位与此通道支持的操作不对应,即set & ~validOps() != 0 -
ClosedChannelException- 如果此通道关闭
-
implCloseChannel
protected final void implCloseChannel() throws IOException关闭此频道。该方法在
AbstractInterruptibleChannel类中指定并由close方法调用,依次调用implCloseSelectableChannel方法,以执行关闭此通道的实际工作。 然后取消所有此频道的密钥。- Specified by:
-
implCloseChannel在AbstractInterruptibleChannel - 异常
-
IOException- 如果在关闭通道时发生I / O错误
-
implCloseSelectableChannel
protected abstract void implCloseSelectableChannel() throws IOException关闭此可选择的频道。该方法由
close方法调用,以执行关闭通道的实际工作。 该方法仅在通道尚未关闭的情况下被调用,并且不会多次调用。该方法的实现必须安排在该通道上被I / O操作阻塞的任何其他线程立即返回,通过抛出异常或返回正常。
- 异常
-
IOException- 如果发生I / O错误
-
isBlocking
public final boolean isBlocking()
说明从类别复制:SelectableChannel告诉这个通道上的每个I / O操作是否会阻塞直到完成。 新创建的通道始终处于阻止模式。如果此通道关闭,则此方法返回的值未指定。
- Specified by:
-
isBlocking在SelectableChannel - 结果
-
true如果,且仅当此通道处于阻塞模式时
-
blockingLock
public final Object blockingLock()
描述从类别复制SelectableChannel检索configureBlocking和register方法同步的对象。 这在实现需要在短时间内保持特定阻塞模式的适配器通常是有用的。- Specified by:
-
blockingLock在SelectableChannel - 结果
- 阻塞模式锁定对象
-
configureBlocking
public final SelectableChannel configureBlocking(boolean block) throws IOException
调整此频道的屏蔽模式。如果给定的阻塞模式与当前阻塞模式不同,则该方法调用
implConfigureBlocking方法,同时保持适当的锁,以便更改模式。- Specified by:
-
configureBlocking在SelectableChannel - 参数
-
block- 如果true那么这个通道将被置于阻塞模式; 如果是false那么会被放置为非阻塞模式 - 结果
- 这个可选频道
- 异常
-
ClosedChannelException- 如果此通道关闭 -
IOException- 如果发生I / O错误
-
implConfigureBlocking
protected abstract void implConfigureBlocking(boolean block) throws IOException调整此频道的屏蔽模式。该方法由
configureBlocking方法调用,以便执行更改阻塞模式的实际工作。 仅当新模式与当前模式不同时才调用此方法。- 参数
-
block- 如果是true则该通道将被置于阻塞模式; 如果是false那么会被放置为非阻塞模式 - 异常
-
IOException- 如果发生I / O错误
-
-