我有一个档案。有时会发生一个线程读取文件的情况。当他关闭阅读器时,另一个线程出现并尝试从与阅读器关联的相同流中读取。但后来我得到了一些
stream already close exception.
我如何解决这些问题。
像
new BufferedReader(new InputStreamReader(in));
我如何为不同的线程创建seprate流。
答案 0 :(得分:3)
不要从两个不同的线程中读取相同的流。
每个线程都应该有自己的流,并且每个线程在完成后关闭流。这允许每个线程在自己的线程中管理流。尝试从同一个流读取的多个线程只是在寻找麻烦。
答案 1 :(得分:1)
嗯,我认为你不应该在线程完成工作时关闭流。只需将其打开并在完成所有工作后关闭它。
当然,由于您使用的是同一个流,因此需要同步对流的访问以防止冲突。您只需要将对象用作监视器。像:
synchronized(monitor) {
monitor.wait(); // wait for signal
}
// read from input stream
synchronized(monitor) {
monitor.notify(); // release the next thread to start reading
}
每个线程都将运行此代码。然后主线程将为第一个线程调用notify以允许它读取,然后如果你启动其他线程,它们将等待前一个线程完成。
请注意,这里我假设您不想并行读取文件。
答案 2 :(得分:0)
如果你在多个线程中运行它,它将为每个线程创建一个。
BufferedReader br = new BufferedReader(new FileReader(file));
// do some reading
br.close();