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对应的键SelectionKey
void removeKey(SelectionKey k)从SelectionKey数组删除该SelectionKey,并将该SelectionKey注销
boolean haveValidKeys()判断SelectionKey数组中是否含有有效的SelectionKey
final boolean isRegistered()判断该通道是否向任意选择器Selector注册过
final SelectionKey keyFor(Selector sel)获取表示通道在给定选择器Selector中注册的密钥SelectionKey
final 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()返回关于在选择器上注册通道和设置阻塞模式的锁regLock
final SelectableChannel configureBlocking(boolean block)调整此通道的阻塞模式,如果此通道已向一个或多个选择器注册,则尝试将其置于阻塞模式将导致抛出IllegalBlockingModeException
abstract void implConfigureBlocking(boolean block)调整此通道的阻塞模式的实现方法,上一个方法调用此方法来改变阻塞模式
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lolxxs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值