FileLocking

Status
Nicht offen für weitere Antworten.
S

surfi

Gast
Hallo miteinander

Ich hoffe ich bin im richtigen Forum. Ich habe folgende Problemstellung:

Ich habe 2 Threads in einem Programm. Der eine Thread schreibt alle 10 Sekunden eine XML-Datei (FileOutputStream) und der zweite Thread liest alle 5 Sekunden diese XML-Datei (FileInputStream) ein. Absehbar werden diese beiden Threads einmal gleichzeitig auf die Datei zugreifen wollen. Mein Problem ist nun, wie halte ich die Threads davon ab gleichzeitig auf das FIle zuzugreifen.

Probiert habe ich es mit FileChannel / FileLock. Jedoch ist es das Problem, dass ich vom InputStream zwar über getChannel() den FileChannel holen kann, jedoch kann ich keinen lock() darauf ausführen (NonWritableChannel-Exception) was eigentlich für einen InputStream logisch tönt...

Hat jemand eine Idee?

Vielen Dank im voraus.

Gruss
 
S

surfi

Gast
gute idee. habe gar nicht daran gedacht... kenn mich mit synchronized nicht so aus...

Im ImportThread:
Code:
...
synchronized (Settings.file) {
    InputStream in = new BufferedInputStream(new FileInputStream(Settings.file));
    SAXBuilder builder = new SAXBuilder();
    this.xmlDoc = builder.build(in).getDocument();
    in.close();
}
...

Im ExportThread (Schreiber):
Code:
...
synchronized (Settings.file) {
    FileOutputStream fout = new FileOutputStream(Settings.file);
    OutputStream out = new BufferedOutputStream(fout);
    outxml.output(this.xmlDoc, out);
    out.close();
}
...

wäre dies richtig wenn ich das File-Objekt synchronized mache?
 
Status
Nicht offen für weitere Antworten.

Oben