Java IO - NIO 基本概念

同步、异步、阻塞、非阻塞

首先,这几个概念很是容易搞混淆,但NIO中又有涉及,因此总结一下[1]。异步

  • 同步:API调用返回时调用者就知道操做的结果如何了(实际读取/写入了多少字节)。
  • 异步:相对于同步,API调用返回时调用者不知道操做的结果,后面才会回调通知结果。
  • 阻塞:当无数据可读,或者不能写入全部数据时,挂起当前线程等待。
  • 非阻塞:读取时,能够读多少数据就读多少而后返回,写入时,能够写入多少数据就写入多少而后返回。

对于I/O操做,根据Oracle官网的文档,同步异步的划分标准是“调用者是否须要等待I/O操做完成”,这个“等待I/O操做完成”的意思不是指必定要读取到数据或者说写入全部数据,而是指真正进行I/O操做时,好比数据在TCP/IP协议栈缓冲区和JVM缓冲区之间传输的这段时间,调用者是否要等待。spa

因此,咱们经常使用的 read() 和 write() 方法都是同步I/O,同步I/O又分为阻塞和非阻塞两种模式,若是是非阻塞模式,检测到无数据可读时,直接就返回了,并无真正执行I/O操做。线程

总结就是,Java中实际上只有 同步阻塞I/O、同步非阻塞I/O 与 异步I/O 三种机制,咱们下文所说的是前两种,JDK 1.7才开始引入异步 I/O,那称之为NIO.文档

相关文章
相关标签/搜索