Remarque: J'ai lu d'autres messages sur la façon de verrouiller et déverrouiller un fichier. Je n'ai rien trouvé de spécial dont je n'étais pas au courant. Donc je vais mettre mon scénario ici pour que quelqu'un puisse donner des suggestions. Dans mon expérience, FileChannel.lock ne garantit pas la situation de verrouillage et de déverrouillage d'un fichier lorsque différents objets de plusieurs instances de jvm tentent de verrouiller et de mettre à jour le fichier.verrouillage et mise à jour d'un fichier En conséquence
Le scénario dans ma demande est - il y a trois programmes distincts qui mettent à jour un fichier. Ces programmes sont exécutés sur différentes instances jvm. Supposons que les programmes sont A, B et C, et que le fichier est F. Si A verrouille le fichier F, B et C doivent attendre que F soit relâché avant que l'un des autres programmes ne puisse y accéder. Cela fonctionne correctement si les programmes sont exécutés sur la même instance jvm. Malheureusement, cela ne fonctionne pas dans plusieurs instances jvm.
J'ai eu une autre idée qui était d'avoir un fichier plat où j'indiquer si F devrait être mis à jour. Le contenu de ce fichier plat peut être VERROUILLÉ ou DÉVERROUILLÉ. La valeur par défaut/initial serait UNLOCKED. Ainsi, quand l'un des programmes voudrait mettre à jour F, il doit voir le drapeau dans le fichier plat. Si le drapeau lit LOCKED, il devrait attendre. Dans cette approche, il y a un problème - si plusieurs programmes ouvrent le fichier plat exactement en même temps et voient "UNLOCKED" ou deux programmes qui attendaient le fichier plat pour lire UNLOCKED et exactement en même temps voir le fichier " DÉVERROUILLÉ "?
Une idée les gars?
avez déjà regardé la mise en œuvre de Lucene de org.apache.lucene.store.Lock (par exemple SimpleFSLock et NativeFSLock)? Ces classes sont faites dans le même but, alors peut-être que vous avez des idées à partir de là. – sfussenegger
Ça a l'air cool .. Je vais jeter un coup d'oeil. Merci un million. – DragonBorn