浅谈Java中BIO、NIO和AIO的区别和应用场景

 更新时间:2019年04月03日 10:42:17   作者:罗啦啦  
这篇文章主要介绍了Java中BIO、NIO和AIO的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近一直在准备面试,为了使自己的Java水平更上一个档次,拜读了李林峰老师的《Netty权威指南》,了解了Java关于IO的发展和最新的技术,真是受益匪浅,现在把我总结的关于BIO、NIO和AIO的区别和应用场景概述一遍。

在此之前,先弄清几个概念:

1.同步:使用同步IO时,Java自己处理IO读写。

2.异步:使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,完成后OS通知Java处理(回调)。

3.阻塞:使用阻塞IO时,Java调用会一直阻塞到读写完成才返回。

4.非阻塞:使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成。

下面是重点了(敲黑板!)!

1.BIO:同步并阻塞,服务器的实现模式是一个连接一个线程,这样的模式很明显的一个缺陷是:由于客户端连接数与服务器线程数成正比关系,可能造成不必要的线程开销,严重的还将导致服务器内存溢出。当然,这种情况可以通过线程池机制改善,但并不能从本质上消除这个弊端。

2.NIO:在JDK1.4以前,Java的IO模型一直是BIO,但从JDK1.4开始,JDK引入的新的IO模型NIO,它是同步非阻塞的。而服务器的实现模式是多个请求一个线程,即请求会注册到多路复用器Selector上,多路复用器轮询到连接有IO请求时才启动一个线程处理。

3.AIO:JDK1.7发布了NIO2.0,这就是真正意义上的异步非阻塞,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再通知服务器应用去启动线程处理(回调)。

应用场景:并发连接数不多时采用BIO,因为它编程和调试都非常简单,但如果涉及到高并发的情况,应选择NIO或AIO,更好的建议是采用成熟的网络通信框架Netty。

以上所述是小编给大家介绍的Java中BIO、NIO和AIO的区别详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 解决@Autowired注入static接口的问题

    解决@Autowired注入static接口的问题

    这篇文章主要介绍了解决@Autowired注入static接口的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解Spring MVC的异步模式(高性能的关键)

    详解Spring MVC的异步模式(高性能的关键)

    本篇文章主要介绍了详解Spring MVC的异步模式(高性能的关键),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Java 内存模型(JVM)

    Java 内存模型(JVM)

    本文公国讲解Java 内存模型来看看解决可见性、有序性问题的 Java 内存模型(JMM),今天通过本文给大家介绍Java 内存模型(JVM)的相关知识,感兴趣的朋友一起看看吧
    2021-08-08
  • SpringBoot实现动态插拔的AOP的完整案例

    SpringBoot实现动态插拔的AOP的完整案例

    在现代软件开发中,面向切面编程(AOP) 是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的 AOP 实现中,切面逻辑往往是固定的,难以动态调整,本文将详细探讨如何利用 Spring Boot 实现动态插拔的 AOP,需要的朋友可以参考下
    2025-01-01
  • java中的静态代码块、构造代码块、构造方法详解

    java中的静态代码块、构造代码块、构造方法详解

    下面小编就为大家带来一篇java中的静态代码块、构造代码块、构造方法详解。小编觉得挺好的,现在分享给大家。给大家一个参考。一起跟随小编过来看看吧
    2016-03-03
  • SpringMVC上传文件FileUpload使用方法详解

    SpringMVC上传文件FileUpload使用方法详解

    这篇文章主要为大家详细介绍了SpringMVC上传文件FileUpload的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Java 生成二维码的工具资料整理

    Java 生成二维码的工具资料整理

    本文主要介绍Java 生成二维码的几种方法,这里给大家详细介绍了java生成二维码的三种工具,并附有示例代码供大家参考,开发java 二维码的朋友可以参考下
    2016-08-08
  • Java使用@Autowired注解获取对象为null的几种情况及解决方法

    Java使用@Autowired注解获取对象为null的几种情况及解决方法

    这篇文章主要给大家介绍了使用@Autowired注解获取对象为null的几种情况以及 解决方法,文中有详细的代码示例讲解,具有一定的参考价值,需要的朋友可以参考下
    2023-09-09
  • 关于Java中@SuppressWarnings的正确使用方法

    关于Java中@SuppressWarnings的正确使用方法

    这篇文章主要介绍了关于Java中@SuppressWarnings的正确使用方法,@SuppressWarnings注解主要用在取消一些编译器产生的警告对代码左侧行列的遮挡,有时候这会挡住我们断点调试时打的断点,需要的朋友可以参考下
    2023-05-05
  • Maven中Junit测试@Test等注解无法识别的问题及解决

    Maven中Junit测试@Test等注解无法识别的问题及解决

    这篇文章主要介绍了Maven中Junit测试@Test等注解无法识别的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论