Java IO:并发IO

时间:2020-01-09 10:36:02  来源:igfitidea点击:

有时我们可能需要同时处理输入和输出。换句话说,我们可能需要多个线程来处理输入并产生输出。例如,我们可能有一个需要处理磁盘上大量文件的应用程序。这可以与性能提升并行进行。或者我们可能有一个服务器,例如Web服务器或者聊天服务器,它接收许多单独的连接和请求。这些也可以并行处理,从而获得一些性能提升。

如果我们需要并发IO,则应注意以下一些一般性问题:

我们一次不得从InputStream或者Reader读取多个线程。我们也不应同时有多个线程同时写入" OutputStream"或者" Writer"。如果是这样,我们将无法保证每个线程将读取多少输入,或者线程以什么顺序将数据写入输出流。

如果依次使用流,读取器或者写入器,则可能可以有多个线程使用流。例如,我们可能有一个线程根据输入确定请求的类型,然后将其移交给相应的线程进行进一步处理。这是可能的,因为对流/读取器/写入器的访问是顺序的。请注意,在线程之间移交流的代码应正确同步。

注意:在Java NIO中,我们可以使一个线程从多个"通道"中读取/写入。例如,如果我们打开了很多网络连接,但是每个连接上只有很少的数据(例如在聊天服务器中),则可以让一个线程监视所有通道(连接)。 Java NIO则是另一回事,将在以后的教程中进行介绍。