java常见面试题之NIO的工作原理是怎样的?

平时我们在日常的工作中总是会遇到很多与java有关的内容,有一些问题还是具有一定的难度的。尤其是之后去面试的时候,会遇到更多难题。所以提前的了解是非常有必要的。一起来看看吧。

首先说一下,NIO的工作原理:

1.由一个专门的线程来处理所有的IO事件,并负责分发。

2.事件驱动机制:事件到的时候触发,而不是同步的去监视事件。

3.线程通讯:线程之间通过wait,notify等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。

然后,它的通信模型是怎么实现的呢?

java NIO采用了双向通道(channel)进行数据传输,而不是单向的流(stream),在通道上可以注册我们感兴趣的事件。

四种事件

服务端接收客户端连接事件SelectionKey.OP_ACCEPT(16)

客户端连接服务端事件SelectionKey.OP_CONNECT(8)

读事件SelectionKey.OP_READ(1)

写事件SelectionKey.OP_WRITE(4)

服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道(channel)上的事件。我们以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,阻塞I/O这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达,则处理这些事件,如果没有感兴趣的事件到达,则处理线程会一直阻塞直到感兴趣的事件到达为止。如下图:

java常见面试题之NIO的工作原理

最后补充一下,AIO概念

在Java 7中,NIO有了进一步的改进,也就是NIO 2,引入了异步非阻塞IO方式,也有很多人叫它AIO(Asynchronous IO)。异步IO操作基于事件和回调机制,可以简单理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。

其实我们可以看出来在面试的时候有很多的题目并不在我们日常的了解当中,所以这也就要求我们要注意积累。如果你想要了解更多Java面试题,敬请关注奇Q工具网。

推荐阅读:

java常见面试题之文件上传漏洞是什么?

java常见面试题:如何防范Web攻击?

java常见面试题:OSI 的七层模型都有哪些?