2010-10-19 21 views
7

Hier ist das Szenario:Kann man Dateien gleichzeitig lesen und schreiben?

  • ThreadA von einer Steckdose lesen wird, und Schreiben von Daten auf „MyFile.txt“
  • ThreadB wird „MyFile“ zu lesen, und wenn es das Ende erreicht es, Willensschleifen, bis neue Daten in MyFile verfügbar sind (weil ich "MyFile.txt" nicht wieder öffnen will und die Zeit verliere, so erreiche ich die Position von wo ich war ..).

Ist es möglich, so etwas zu tun?

Wenn nicht, gibt es einen anderen Weg, so etwas zu tun?

+0

möglich Duplikat mit [Wie verwende ich Java aus einer Datei zu lesen, die aktiv geschrieben wird?] (Http://stackoverflow.com/questions/4149/ how-do-i-use-java-zu-lesen-von-einer-Datei-das-ist-aktiv-geschrieben-werden –

+0

Ich habe einen Link zu einer Frage hinzugefügt, die ein Duplikat von diesem ist. Aber haben Sie zufällig RandomAccessFile gesehen? Sie müssen nicht erneut eine ganze Datei durchlaufen, um von einer bestimmten Position zu lesen –

Antwort

13

Das Problem, das Sie erwähnen, ist eine berühmte Producer Consumer Problem

Gemeinsame Lösung für diesen BlockingQueue

Ein Beispiel realer Welt Nutzung in AjaxYahooSearchEngineMonitor ist

zu verwenden ist, was Thread A ist, wird es einreichen eine Zeichenfolge, die in die Warteschlange gestellt wird, und dann sofort zurückkehrt.

Was Thread B tut ist, es wird das Objekt aus der Warteschlange eins nach dem anderen abholen und sie verarbeiten. Wenn sich kein Element in der Warteschlange befindet, wartet Thread B nur dort. Siehe Zeile 83 des Quellcodes.

+0

vielen Dank !! das ist genau das, was ich wollte. es ist besser als Lesen/Schreiben von DataBase oder Datei. – mohamida

2

Ich denke, es möglich ist, Java NIO Bibliotheken

+1

Ich glaube nicht, dass es Suresh ist, aber ich bin froh, dass es korrigiert wird, wenn du zeigst, wie es geht. –

+0

@Nick mit Selektoren für jeden Thread und Synchronisierung auf ihnen ist möglich. –

Verwandte Themen