Можно ли читать и записывать в файл одновременно? - PullRequest
8 голосов
/ 19 октября 2010

Вот сценарий:

  • ThreadA собирается читать из некоторого сокета и записывать данные в «MyFile.txt»
  • ThreadB будет читать «MyFile», и когда он достигнет конца, он будет зацикливаться, пока в MyFile не появятся новые данные (потому что я не хочу повторно открывать «MyFile.txt» и терять время поэтому я достиг позиции, откуда я был ..).

Можно ли сделать такую ​​вещь?

Если нет, есть ли другой способ сделать такое?

1 Ответ

13 голосов
/ 19 октября 2010

Проблема, о которой вы упомянули, - это известная проблема Producer Consumer

Общим решением для этого является использование BlockingQueue

Пример использования в реальном мире приведен в AjaxYahooSearchEngineMonitor

Что делает поток A, так это отправляет строку в очередь, а затем сразу возвращает.

Что делает поток B, так это то, что один за другим он берет элемент из очереди и обрабатывает его. Когда в очереди нет элемента, поток B просто будет ждать там. См. Строку 83 исходного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...