2010-10-19 103 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

相關問題