博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java NIO概述
阅读量:4179 次
发布时间:2019-05-26

本文共 575 字,大约阅读时间需要 1 分钟。

从Java 1.4开始,为提升Java IO的效率,提供了Java NIO相关API。该API细分了IO请求与IO的实际执行,从而使得线程可以更高效得并行执行。

Java 1.7彻底解决了线程发出IO请求后的阻塞问题,也被称为NIO 2.0。

1. Java IO的实现方式

  • 阻塞的BIO
线程发出IO请求后阻塞,等待IO处理。
  • 同步非阻塞的NIO(JDK4)
线程发出IO请求后不阻塞,给IO处理设置必要的选择器(如回调方法或事件监听器)后,线程还可以继续处理其他任务。
但是IO请求实际上是通过select系统调用发出的,而select系统调用是阻塞的,所以线程其实还是要等待select系统调用的返回。
IO处理完毕后,select系统调用返回,线程取到IO请求的数据,继续进行其他处理。
  • 异步非阻塞的AIO(NIO2.0, JDK7)
线程发出IO请求后不阻塞,等待IO处理的过程中,线程还可以通过选择器处理其他任务。
2. Java IO与NIO的比较
IO面向的是数据流,NIO面向的是数据缓存(即通道);
IO请求往往阻塞,NIO请求往往非阻塞(发出请求后去处理其他通道);
NIO通过为通道设置选择器,一个线程可以同时处理多个通道;
NIO处理的结果,通过Watcher注册的事件监听,监听的事件发生即唤醒选择器,继续当前通道的处理。

转载地址:http://bnlai.baihongyu.com/

你可能感兴趣的文章
Nginx配置多个项目放在不同的tomcat中,共享同一个端口
查看>>
mysql的JDBC连接工具类
查看>>
ORACLE的JDBC连接工具类
查看>>
利用多线程(用到原子类AtomicInteger)往数据库批量插入大量数据
查看>>
多个线程操作数组
查看>>
定长线程池的应用
查看>>
生产者和消费者模式
查看>>
ArrayBlockingQueue的简单使用
查看>>
Git 常用命令总结(一)
查看>>
Git 常用命令总结(二)
查看>>
JAVA 并发——synchronized的分析
查看>>
Echarts——使用 dataset 管理数据
查看>>
DES 加解密工具类
查看>>
JAVA乱码问题——URL中的+,空格,/,?,%,#,&,= 及转义处理
查看>>
Base64编解码工具类
查看>>
使用IntelliJ IDEA2018创建Maven多模块项目
查看>>
SpringBoot多模块项目实践(Multi-Module)
查看>>
第一篇: 服务的注册与发现Eureka(Greenwich版)
查看>>
第二篇: 服务消费者(rest+ribbon)(Greenwich版本)
查看>>
第三篇: 服务消费者(Feign)(Greenwich版本)
查看>>