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.文檔

相關文章
相關標籤/搜索