public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector
复用。
为了使用一个选择器,这个类的实例必须首先注册通过register
方法。此方法返回一个新的SelectionKey
对象表示与选择器通道的登记。
一旦注册一个选择器,信道仍然注册直到注销。这包括释放任何资源分配给由选择的通道。
一个通道不能直接注销;相反,主要代表其登记必须取消。取消一个关键要求的通道被撤销在选择器的下一步选择操作。一个键可以取消明确地调用其cancel
方法。所有通道上的键是取消隐当通道关闭,无论是通过调用其close
法或中断一个线程阻塞在I/O操作在通道。
如果选择本身就通道将被注销,以及关键的代表其注册将失效,不得延误。
一个通道可以在大多数一次注册一个特定的选择器。
是否有一个通道与一个或多个选择器注册可以通过调用isRegistered
法测定。
可选的通道是安全的,使用多个并发线程。
isBlocking
法测定。
新创建的可选择的通道总是在阻塞模式。非阻塞模式是最有用的结合基于选择器的复用。信道必须置于非阻塞模式才具有选择注册,不得回到阻塞状态直到它已被注销。
SelectionKey
,
Selector
Modifier | Constructor and Description |
---|---|
protected |
SelectableChannel()
初始化该类的一个新实例。
|
Modifier and Type | Method and Description |
---|---|
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()
返回一个
operation set识别这一渠道的支持的操作。
|
begin, close, end, implCloseChannel, isOpen
public abstract SelectorProvider provider()
public abstract int validOps()
public abstract boolean isRegistered()
由于关键的消除和信道注销之间的固有延迟、信道可保持注册一段时间后,其所有的按键都被取消了。通道也可能在关闭后的一段时间保持注册一段时间。
public abstract SelectionKey keyFor(Selector sel)
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
-如果这通道关闭
ClosedSelectorException
-如果选择关闭
IllegalBlockingModeException
-如果这通道阻塞模式
IllegalSelectorException
-如果这通道不是由同一供应商创建给定选择器
CancelledKeyException
-如果这个频道是目前与给定选择器注册但相应的密钥已被取消
IllegalArgumentException
-如果在
ops集一点不对应,通过这个渠道,是支持一个操作,如果
set & ~validOps() != 0
public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException
sel
-选择这种渠道是可以注册
ops
集产生兴趣的关键
ClosedChannelException
-如果这通道关闭
ClosedSelectorException
-如果选择关闭
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
方法同步。这是在适配器,需要一个特定的阻塞模式保持一段时间的实施往往是有用的。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.