2010-10-19 76 views
7

这里的情景:是否可以同时读写文件?

  • 的ThreadA会从一些套接字读取和写入数据到“MyFile.txt的”
  • ThreadB是要读“MyFile的”,当它到达结束时,会循环直到MyFile中有新的数据可用(因为我不想重新打开“MyFile.txt”,并且失去了时间,所以我到达了我所在的位置..)。

是否有可能做这样的事情?

如果没有,是否有另一种方法来做这样的事情?

+0

可能重复[如何使用Java从正在被写入一个文件中读取?](http://stackoverflow.com/questions/4149/如何使用java-to-read-from-a-file-that-being-being-being-being-being) – 2010-10-19 07:57:31

+0

我已经添加了一个问题链接,该问题与此问题重复。但顺带一提,你有没有看过RandomAccessFile?你不需要再从整个文件中读取一个特定的位置 – 2010-10-19 07:58:45

回答

13

你提到的问题是这个著名的Producer Consumer Problem

常用的解决方法是使用BlockingQueue

现实世界中使用的一个例子是AjaxYahooSearchEngineMonitor

不会有什么线程A,它会提交要排队的字符串,然后立即返回。

线程B做了什么,它会逐个从队列中拾取项目,并处理它们。 当队列中没有项目时,线程B将在那里等待。请参阅源代码的第83行。

+0

非常感谢!这正是我想要的。它比从DataBase或文件读取/写入要好。 – mohamida 2010-10-19 09:16:44

2

我认为这是可能使用Java NIO库

+1

我不认为这是苏雷什,但如果你展示如何去做,我很乐意予以纠正。 – 2010-10-19 07:59:41

+0

@Nick使用每个线程的选择器并对其进行同步是可能的。 – 2010-10-19 08:09:54

相关问题