本文主要是介绍《Java源码解析》之NIO的Selector机制(Part2:SelectableChannel.register(Selector sel, int ops)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通过上一篇博客,我们知道了Selector机制中的open()函数做了什么,其实也就是创建了一个管道,并把pipe的读写文件描述符放入pollArray中,这个pollArray是Selector的枢纽。下面我们抓取源码看一下channel在selector中注册时做了什么?
SelectableChannel.register(Selector sel, int ops)
SelectableChannel.register(Selector sel, int ops))函数分析
register()函数是在SelectableChannel这个类中实现的,所以只有继承自这个类的channel才能通过selector管理,这个要点在前面博客中已经解释过了。那么问题在于这个register()函数做了什么呢?我们先看看JavaDoc上面的解释:
public final SelectionKey register(Selector sel, int ops)throws ClosedChannelException
{return register(sel, ops, null);
}
javaDoc上面解释:向给定的选择器注册此通道,返回一个选择键。该方法调用一个多态的register(sel, ops, null);
我们进入这个多态的函数如下:
public abstract SelectionKey register(Selector sel, int ops, Object att)throws ClosedChannelException;
发现这是一个抽象方法,进入实现方法:在进入实现方法之前,我先给出ServerSocketServer的类继承图:
所以我们可以知道AbstractSelectableChannel是继承自SelectableChannel类的,并且在AbstractSelectableChannel中实现了register(Selector sel, int ops, Object att)方法。源码如下:
public final SelectionKey register(Selector sel, int ops, Object att)throws ClosedChannel
这篇关于《Java源码解析》之NIO的Selector机制(Part2:SelectableChannel.register(Selector sel, int ops))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!