java AbstractSelectableChannel虚拟类

java AbstractSelectableChannel虚拟类,第1张

java AbstractSelectableChannel虚拟类 总结
  1. AbstractSelectableChannel虚拟类是的多路复用通道SelectableChanne基本实现类
  2. 此类定义处理通道注册、注销和关闭机制的方法,它保持此通道的当前阻塞模式及其当前选择键集SelectionKey[],它执行实现java.nio.channels.SelectableChannel规范所需的所有同步
  3. AbstractSelectableChannel虚拟类继承SelectableChannel,SelectableChannel虚拟类可以看我这篇文章 SelectableChannel
AbstractSelectableChannel虚拟类数据结构
public abstract class AbstractSelectableChannel
    extends SelectableChannel
{
    private final SelectorProvider provider;
    private SelectionKey[] keys = null;
    private int keyCount = 0;
    private final Object keyLock = new Object();
    private final Object regLock = new Object();
    boolean blocking = true;
}
  1. SelectorProvider是创建此通道的提供程序
  2. SelectionKey[] 是该通道向一个或多个选择器注册返回的SelectionKey构成的数组,
  3. keyCount是该通道拥有的SelectionKey的计数,为什么要有这个呢,因为SelectionKey[] 里面的SelectionKey可能被释放掉了,所以SelectionKey[]数组的长度并不代表SelectionKey总数
  4. keyLock 是添加、删除、查找SelectionKey需要加上的锁
  5. regLock 是该通道向选择器注册时和配置该通道的阻塞模式需要加上的锁
  6. blocking 表示当前通道是否是阻塞模式,阻塞模式的表现和BIO一样,read和write *** 作需要阻塞,在向选择器注册之前,必须将阻塞模式设为false,表示非阻塞模式
AbstractSelectableChannel虚拟类方法 方法名作用void addKey(SelectionKey k)添加从选择器注册该通道返回的SelectionKey到SelectionKey数组中SelectionKey findKey(Selector sel)遍历SelectionKey数组寻找该选择器Selector对应的键SelectionKeyvoid removeKey(SelectionKey k)从SelectionKey数组删除该SelectionKey,并将该SelectionKey注销boolean havevalidKeys()判断SelectionKey数组中是否含有有效的SelectionKeyfinal boolean isRegistered()判断该通道是否向任意选择器Selector注册过final SelectionKey keyFor(Selector sel)获取表示通道在给定选择器Selector中注册的密钥SelectionKeyfinal SelectionKey register(Selector sel, int ops, Object att)在给定选择器上注册此通道,并返回选择键SelectionKey, ops为兴趣集,即该通道感兴趣的事件,如连接建立事件,att是附件,放在SelectionKey中,方便以后取出来使用final void implCloseChannel()关闭此通道,close方法调用此方法,以执行关闭通道的实际工作。仅当通道尚未关闭时才调用此方法,并且从未多次调用此方法,此方法的实现必须让在该通道上的I/O *** 作中被阻塞的任何其他线程立即返回,可以通过引发异常或正常返回abstract void implCloseSelectableChannel()implCloseChannel()方法内部调用此方法,以实现关闭SelectableChannel多路复用通道final boolean isBlocking()判断此通道上是否是阻塞模式,即通道上的每个I/O *** 作都将阻塞,新创建的通道默认为阻塞模式final Object blockingLock()返回关于在选择器上注册通道和设置阻塞模式的锁regLockfinal SelectableChannel configureBlocking(boolean block)调整此通道的阻塞模式,如果此通道已向一个或多个选择器注册,则尝试将其置于阻塞模式将导致抛出IllegalBlockingModeExceptionabstract void implConfigureBlocking(boolean block)调整此通道的阻塞模式的实现方法,上一个方法调用此方法来改变阻塞模式

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5676530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存