阻止java.io/java.nio

时间:2015-06-16 03:30:32

标签: java java-io

我刚看完......

  

使用流的类位于两个包中:   java.io和java.nio。来自前者的类实现   阻塞输入/输出(I / O):当a读取/写入字节时   进程,它们变得不可用于其他执行线程。该   后一种软件包提供了非阻塞I / O,并提高了性能。

...并希望了解这一点。阻塞是否仅影响单个相关线程,但保持源(即文件或数据库)本身不受阻塞,准备好被其他流访问?或者阻塞实际上是否阻止了源本身的访问,直到当前线程完成读取?

3 个答案:

答案 0 :(得分:3)

'阻塞'表示您调用的I / O方法阻塞调用线程,直到至少传输了一些数据,或者直到接受或连接操作成功或失败。

'非阻塞'意味着如果没有数据可以传输,I / O方法会立即返回适当的返回值或异常,或者连接操作在后台进行,可以在以后检查完成。 / p>

为了完整性,'异步'意味着I / O方法立即返回,但操作在后台继续,其结果可在适当时候通过另一个调用或回调获得。

答案 1 :(得分:1)

阻塞基本上是指线程调用read()或write()时,阻止执行任何其他操作,直到有一些数据要读取或写入数据为止。在此期间,线程可以不做其他事情。

因此阻塞与线程本身有关,而与数据源无关。

答案 2 :(得分:-1)

考虑一下你有两个线程的情况。两个线程都从单个套接字流中读取。在这里,我们关注的是我们正在阅读的源字节以及我们需要根据Multi-threading进行检查。原因是Blocking I/O

  • 阻止I / O:这是I / O,它无限期地等待源的可用性。线程的执行在此时等待,这增加了应用程序HangSlowness的可能性。 java.io包是此类型的示例

  • 非阻塞I / O:这是I / O,它不会等待源无限时间,但会立即返回。 java.nio包是此类型的示例