首先,这几个概念很是容易搞混淆,但NIO中又有涉及,因此总结一下[1]。异步
对于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.文档