本文主要是介绍《Java源码解析》之NIO的Selector机制(Part1:Selector.open()),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Selector机制之Selector.open()函数的解析
在NIO中我们一般都是Channel与Selector配合使用的,一般情况下使用的方法如下:
//打开Selector来处理channel
Selector selector = Selector.open();
//将channel注册到selector中,并将channel设置成等待新的连接
serverChannel.register(selector,SelectionKey.OP_ACCEPT);
//等待处理新的事件;一直阻塞直到下一个事件到来才唤醒.此方法执行处于阻塞模式的选择操作。仅在至少选择一个通道、调用此选择器的 wakeup 方法,或者当前的线程已中断(以先到者为准)后此方法才返回。
selector.select();
这篇博客我们主要从Selector.open()函数开始,一步步分析Selector机制。
- 首先我们进入Selector.open();函数,在JDK源码中定义如下:
public static Selector open() throws IOException {return SelectorProvider.provider().openSelector();}
查看这个函数的doc文档注释:
The new selector is created by invoking the openSelector method of the system-wide default SelectorProvider object.
意思是:通过调用系统默认的SelectorProvider(这里不同的系统会有不同的SelectorProvider实现类)的openSelector()方法来创建新的selector。
这里我们首先分析一下:
SelectorProvider.provider();
进入SelectorProvider这个类的静态方法provider(),JDK的源码如下:
public static SelectorProvider provider() {/***加锁,锁的定义是:private static final Object lock = new Object();*/synchronized (lock) {
这篇关于《Java源码解析》之NIO的Selector机制(Part1:Selector.open())的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!