本文主要是介绍我对于 JDK中 BIO/NIO/AIO 的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- BIO/NIO/AIO名字的具体含义:
- BIO:Bloking IO (同步,阻塞IO)
- NIO:Non-bloking IO (同步,非阻塞IO{由于是在nio包下,称为NIO1 jdk1.6+})
- AIO:Asynchronous IO (异步,非阻塞IO。称为NIO2,jdk1.7+)
BIO/NIO/AIO区别
BIO:在代码中调用时当前线程会卡在调用的哪一行,直到需要获取写的数据操作完毕,才继续进行下一步操作。
NIO:调用相应非阻塞方法(如)
socketChannel.configureBlocking(false);
socketChannel.connect(Inet..);
,在相关准备操作完毕之后立即返回,此时会给socketChannel
实例加上适当的状态。回到主线程中继续执行相关代码,但是需要对socketChannel
进行忙询问,如通过while循环一直判断该socketChannel是否已完成建立连接,在还没有建立连接时需要做什么。。。AIO:调用相应非阻塞异步方法,JDK提某类操作完成调用的API(由我们来实现当特定操作完成之后,调用实现接口的方法),在进行相应操作时候自动创建相应线程来调用该实现。总的来说对于AIO,我们只负责在初次调用时,把一切都准备好,然后继续做其他与当前操作无关的事,后续与当前操作有关的由于都已经事先准备好,由JDK在事件发生时自动调用。
这篇关于我对于 JDK中 BIO/NIO/AIO 的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!