首先,這幾個概念很是容易搞混淆,但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.文檔