|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.nio.channels.spi.AbstractInterruptibleChannel java.nio.channels.SelectableChannel
public abstract class SelectableChannel
可通过 Selector
实现多路复用的通道。
为了与选择器一起使用,此类的实例必须首先通过 register
方法进行注册。此方法返回一个表示该通道已向选择器注册的新 SelectionKey
对象。
向选择器注册后,通道在注销 之前将保持注册状态。注销涉及释放选择器已分配给该通道的所有资源。
不能直接注销通道;相反,必须取消 表示通道注册的键。取消某个键要求在选择器的下一个选择操作期间注销通道。可通过调用某个键的 cancel
方法显式地取消该键。无论是通过调用通道的 close
方法,还是中断阻塞于该通道上 I/O 操作中的线程来关闭该通道,都会隐式地取消该通道的所有键。
如果选择器本身已关闭,则将注销该通道,并且表示其注册的键将立即无效。
一个通道至多只能在任意特定选择器上注册一次。
可通过调用 isRegistered
方法来确定是否向一个或多个选择器注册了某个通道。
多个并发线程可安全地使用可选择的通道。
isBlocking
方法来确定其阻塞模式。
新创建的可选择通道总是处于阻塞模式。在结合使用基于选择器的多路复用时,非阻塞模式是最有用的。向选择器注册某个通道前,必须将该通道置于非阻塞模式,并且在注销之前可能无法返回到阻塞模式。
SelectionKey
,
Selector
构造方法摘要 | |
---|---|
protected |
SelectableChannel() 初始化此类的一个新实例。 |
方法摘要 | |
---|---|
abstract Object |
blockingLock() 获取其 configureBlocking 和 register 方法实现同步的对象。 |
abstract SelectableChannel |
configureBlocking(boolean block) 调整此通道的阻塞模式。 |
abstract boolean |
isBlocking() 判断此通道上的每个 I/O 操作在完成前是否被阻塞。 |
abstract boolean |
isRegistered() 判断此通道当前是否已向任何选择器注册。 |
abstract SelectionKey |
keyFor(Selector sel) 获取表示通道向给定选择器注册的键。 |
abstract SelectorProvider |
provider() 返回创建此通道的提供者。 |
SelectionKey |
register(Selector sel, int ops) 向给定的选择器注册此通道,返回一个选择键。 |
abstract SelectionKey |
register(Selector sel, int ops, Object att) 向给定的选择器注册此通道,返回一个选择键。 |
abstract int |
validOps() 返回一个操作集,标识此通道所支持的操作。 |
从类 java.nio.channels.spi.AbstractInterruptibleChannel 继承的方法 |
---|
begin, close, end, implCloseChannel, isOpen |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
从接口 java.nio.channels.Channel 继承的方法 |
---|
close, isOpen |
构造方法详细信息 |
---|
protected SelectableChannel()
方法详细信息 |
---|
public abstract SelectorProvider provider()
public abstract int validOps()
public abstract boolean isRegistered()
由于键取消和通道注销之间固有的延迟,所以在已取消某个通道的所有键后,该通道可能在一定时间内还会保持已注册状态。关闭通道后,该通道可能在一定时间内还会保持已注册状态。
public abstract SelectionKey keyFor(Selector sel)
public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
如果当前已向给定的选择器注册了此通道,则返回表示该注册的选择键。该键的相关操作集将更改为 ops,就像调用 interestOps(int)
方法一样。如果 att 参数不为 null,则将该键的附件设置为该值。如果已取消该键,则抛出 CancelledKeyException
。
如果尚未向给定的选择器注册此通道,则注册该通道并返回得到的新键。该键的初始可用操作集是 ops,并且其附件是 att。
可在任意时间调用此方法。如果调用此方法的同时正在进行另一个此方法或 configureBlocking
方法的调用,则在另一个操作完成前将首先阻塞该调用。然后此方法将在选择器的键集上实现同步,因此如果调用此方法时并发地调用了涉及同一选择器的另一个注册或选择操作,则可能阻塞此方法的调用。
如果正在进行此操作时关闭了此通道,则此方法返回的键是已取消的,因此返回键无效。
sel
- 要向其注册此通道的选择器
ops
- 所得键的可用操作集
att
- 所得键的附件,可能为
null
ClosedChannelException
- 如果此通道已关闭
IllegalBlockingModeException
- 如果此通道处于阻塞模式
IllegalSelectorException
- 如果此通道与给定的选择器不是由相同的提供者创建的
CancelledKeyException
- 如果此通道当前已向给定的选择器注册,但是相应的键已经被取消
IllegalArgumentException
- 如果
ops 集的某个位不对应于此通道所支持的某个操作,也就是说,如果
set & ~validOps() != 0
public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException
调用此便捷方法的形式为
sc.register(sel, ops)与下列方法调用完全相同:
sc.register
(sel, ops, null)
sel
- 要向其注册此通道的选择器
ops
- 所得键的可用操作集
ClosedChannelException
- 如果此通道已关闭
IllegalBlockingModeException
- 如果此通道处于阻塞模式
IllegalSelectorException
- 如果此通道与给定的选择器不是由相同的提供者创建的
CancelledKeyException
- 如果此通道当前已向给定的选择器注册,但是相应的键已经被取消
IllegalArgumentException
- 如果
ops 集的某个位不对应于此通道所支持的某个操作,也就是说,如果
set & ~validOps() != 0
public abstract SelectableChannel configureBlocking(boolean block) throws IOException
如果向一个或多个选择器注册了此通道,则尝试将此通道置于阻塞模式将导致抛出 IllegalBlockingModeException
。
可在任意时间调用此方法。新的阻塞模式仅影响在此方法返回后发起的 I/O 操作。对于某些实现而言,这可能需要在所有挂起的 I/O 操作完成之前阻塞其他操作。
如果调用此方法的同时正在进行另一个此方法或 register
方法的调用,则在另一个操作完成前将首先阻塞该调用。
block
- 如果为
true,则此通道将被置于阻塞模式;如果为
false,则此通道将被置于非阻塞模式
ClosedChannelException
- 如果此通道已关闭
IllegalBlockingModeException
- 如果
block 为
true 并且此通道已向一个或多个选择器注册
IOException
- 如果发生 I/O 错误
public abstract boolean isBlocking()
如果此通道已关闭,则此方法返回的值是未指定的。
public abstract Object blockingLock()
configureBlocking
和
register
方法实现同步的对象。在要求在短时间内维持特定阻塞模式的适配器实现中,这通常是很有用的。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。