Java NIO概述

来源:互联网 发布:绝地求生渣显卡优化 编辑:程序博客网 时间:2024/06/06 01:08

从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注册的事件监听,监听的事件发生即唤醒选择器,继续当前通道的处理。
1 0
原创粉丝点击