- 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 描述 protected
AbstractSelectableChannel(SelectorProvider provider)
初始化此类的新实例。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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)
使用给定的选择器注册此频道,返回一个选择键。-
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错误
-
-