2015-12-02 81 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