Frage

Hinweis : Ich habe andere Beiträge gelesen, wie eine Datei zu sperren und entsperren. Ich habe nichts Besonderes feststellen, dass ich nicht bewusst war. So ist ich werde hier mein Szenario setzen, damit jemand ein paar Vorschläge aus geben kann.

Nach meiner Erfahrung ist FileChannel.lock keine Garantie für die Situation des Ver- und Entriegeln einer Datei, wenn verschiedene Objekte aus mehreren Instanzen von Jvm versuchen, die Datei zu sperren und zu aktualisieren.

Das Szenario in meiner Anwendung ist - gibt es drei separate Programme, die eine Datei aktualisieren. Diese Programme sind auf verschiedenen JVM-Instanzen laufen. Sagen die Programme A, B und C, und die Datei ist F. Wenn A die Datei F, B und C sollten für F warten freigegeben werden, bevor einer der anderen Programme sperrt einen Halt auf sie bekommen können. Dies funktioniert gut, wenn die Programme auf der gleichen JVM-Instanz ausgeführt werden. Leider ist dies nicht in mehr JVM-Instanzen arbeiten.

hatte ich eine andere Idee, die eine flache Datei haben, wo ich zeigen würde, wenn F aktualisiert werden soll. Der Inhalt dieser flachen Datei kann entweder gesperrt oder freigegeben werden. Standard / Anfangswert würde ENTSPERRT. Also, wenn Sie eines der Programme F aktualisieren möchte, muss er die Fahne in der flachen Datei sehen. Wenn Flagge liest LOCKED, sollte es warten. Bei diesem Ansatz ist es ein Problem, obwohl - was ist, wenn mehrere Programme öffnen Sie die Flat-Datei genau zur gleichen Zeit und „UNLOCKED“ oder zwei Programme sehen, die für die Flat-File warteten ENTRIEGELTES zu lesen und genau zur gleichen Zeit sieht Datei liest " UNLOCKED "?

Jede Idee, Jungs?

War es hilfreich?

Lösung

Wenn Sie in einem Dateisystem benötigen Sperren, dann müssen Sie ein Verzeichnis erstellen. Verzeichnis existiert Mittel „gesperrt“, fehlendes Verzeichnis bedeutet entsperrt.

Der Grund dafür ist, dass das Erstellen und Löschen von Verzeichnissen atomare Operationen in jedem Dateisystem sein muss. Also, sobald zwei Prozesse versuchen, das gleiche Verzeichnis zu erstellen, einer von ihnen wird eine Fehlermeldung angezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top