我刚看完......
使用流的类位于两个包中: java.io和java.nio。来自前者的类实现 阻塞输入/输出(I / O):当a读取/写入字节时 进程,它们变得不可用于其他执行线程。该 后一种软件包提供了非阻塞I / O,并提高了性能。
...并希望了解这一点。阻塞是否仅影响单个相关线程,但保持源(即文件或数据库)本身不受阻塞,准备好被其他流访问?或者阻塞实际上是否阻止了源本身的访问,直到当前线程完成读取?
答案 0 :(得分:3)
'阻塞'表示您调用的I / O方法阻塞调用线程,直到至少传输了一些数据,或者直到接受或连接操作成功或失败。
'非阻塞'意味着如果没有数据可以传输,I / O方法会立即返回适当的返回值或异常,或者连接操作在后台进行,可以在以后检查完成。 / p>
为了完整性,'异步'意味着I / O方法立即返回,但操作在后台继续,其结果可在适当时候通过另一个调用或回调获得。
答案 1 :(得分:1)
阻塞基本上是指线程调用read()或write()时,阻止执行任何其他操作,直到有一些数据要读取或写入数据为止。在此期间,线程可以不做其他事情。
因此阻塞与线程本身有关,而与数据源无关。
答案 2 :(得分:-1)
考虑一下你有两个线程的情况。两个线程都从单个套接字流中读取。在这里,我们关注的是我们正在阅读的源字节以及我们需要根据Multi-threading
进行检查。原因是Blocking I/O
阻止I / O:这是I / O,它无限期地等待源的可用性。线程的执行在此时等待,这增加了应用程序Hang
或Slowness
的可能性。 java.io
包是此类型的示例
非阻塞I / O:这是I / O,它不会等待源无限时间,但会立即返回。 java.nio
包是此类型的示例