面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

Selector提供选择执行已经就绪的任务的能力,使得多元 I/O 成为可能,就绪选择和多元执行使得单线程能够有效率地同时管理多个 I/O channel。


C/C++许多年前就已经有 select()和 poll()这两个POSIX(可移植性操作系统接口)系统调用可供使用。许多os也提供相似的功能,但对Java 程序员来说,就绪选择功能直到 JDK 1.4 才成为可行方案。



简介



获取到SocketChannel后,直接包装成一个任务,提交给线程池。

引入Selector后, 需要将之前创建的一或多个可选择的Channel注册到Selector对象,一个键(SelectionKey)将会被返回。

SelectionKey 会记住你关心的Channel,也会追踪对应的Channel是否已就绪。


面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)



每个Channel在注册到Selector时,都有一个感兴趣的操作。


ServerSocketChannel 只会在选择器上注册一个,其感兴趣的操作只有ACCEPT,表示其只关心客户端的连接请求

SocketChannel,通常会注册多个,因为一个server通常会接受到多个client的请求,就有对应数量的SocketChannel。SocketChannel感兴趣的操作是CONNECT、READ、WRITE,因为其要与server建立连接,也需要进行读、写数据。



1 Selector

1.1 API


open


打开一个 selector

新的selector是通过调用系统默认的SelectorProvider对象的openSelector方法而创建的。

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)


注意到默认选择器提供者

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)


Mac下的JDK,所以我们需要下载对应平台下的 JDK 哦!

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)


Selector.open()不是单例模式的,每次调用该静态方法,会返回新的Selector实例。

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

面试阿里拿到offer,因为我精通NIO的Selector事件选择器(上)

上一篇:ORA-07445: exception encountered: core dump [kkestGetColGroupNdv()+20]


下一篇:网络和系统监听器Big-sister