2015-12-02 69 views
0

我是java新手,我正在閱讀java nio教程,可以解釋什麼是阻塞模式。 在教程中我讀了 - 'FileChannel不能設置爲非阻塞模式。它始終在阻塞模式下運行'java中的阻塞模式是什麼

+0

IO讀/寫是否阻塞當前進程或異步發生。 –

+0

http://docs.oracle.com/javase/8/docs/api/java/nio/channels/SelectableChannel.html#bm – Holger

+1

我投票結束這個問題作爲題外話,因爲它不是關於編程。 –

回答

5

阻塞模式意味着當前線程無法向前進展,直到I/O操作成功或失敗。在非阻塞模式下,如果操作無法立即前進,控制權將返回給線程,以便稍後再次嘗試操作。

從歷史上看,只有在阻塞模式下才能提供「快速」I/O,如訪問磁盤。兩種模式都提供「慢」I/O,例如等待網絡響應的操作。

+0

它是「稍後再次嘗試操作」還是「操作在background_中發生」,並且線程可以檢查其狀態或通過回調主動通知成功? –

+1

@BoristheSpider他們真的相當。如果某些操作發生在後臺,那麼您將不得不嘗試稍後獲取結果的操作。如果您稍後可以嘗試操作並獲得不同的結果,則稍後嘗試更改結果時,後臺會發生一些操作。 –

+2

@Boris蜘蛛:*兩個*。當操作意味着「返回緩衝區的當前內容」,然後再次成功嘗試它意味着緩衝區在後臺被同時填充......在NIO中,使用非阻塞的'SelectableChannel'意味着您可以使用'選擇器「來監視後臺傳輸的進度。相比之下,'AsynchronousFileChannel'允許您使用回調,但這是一種與非阻塞通道不同的異步傳輸。 – Holger